当前位置: 首页 > news >正文

iOS / SwiftUI 输入法(键盘)布局处理总结(AI版)

文章目录

  • 📘 iOS / SwiftUI 输入法(键盘)处理总结
  • 一、问题背景
  • 二、输入框切换闪烁问题
    • ❌ 错误原因
    • 解决办法
    • 键盘动画(类似 Android Insets)
      • uikit
      • swiftUI

📘 iOS / SwiftUI 输入法(键盘)处理总结


一、问题背景

在 iOS / SwiftUI 开发中,常见输入法问题:

  • 输入框切换时键盘闪烁
  • 键盘弹出/收起动画不自然
  • 无法像 Android WindowInsetsAnimation 一样平滑跟随

二、输入框切换闪烁问题

❌ 错误原因

focusedField=nilfocusedField=.password

解决办法

enumField{caseusernamecasepassword}@FocusStateprivatevarfocusedField:Field?TextField("用户名",text:$username).focused($focusedField,equals:.username)SecureField("密码",text:$password).focused($focusedField,equals:.password)

❗ 注意
不要先设为 nil
不要手动关闭键盘
使用系统焦点切换

键盘动画(类似 Android Insets)

uikit

@objcfunckeyboardWillChangeFrame(_notification:Notification){guardletuserInfo=notification.userInfoelse{return}letduration=userInfo[UIResponder.keyboardAnimationDurationUserInfoKey]as?Double??0.25letcurveRaw=userInfo[UIResponder.keyboardAnimationCurveUserInfoKey]as?UInt??0letcurve=UIView.AnimationOptions(rawValue:curveRaw<<16)letframe=userInfo[UIResponder.keyboardFrameEndUserInfoKey]as?CGRect??.zeroletkeyboardHeight=UIScreen.main.bounds.height-frame.origin.yUIView.animate(withDuration:duration,delay:0,options:curve){self.bottomConstraint.constant=keyboardHeightself.view.layoutIfNeeded()}}

swiftUI

  1. 推荐
.safeAreaInset(edge:.bottom){Color.clear.frame(height:0)}
  1. combine
classKeyboardObserver:ObservableObject{@Publishedvarheight:CGFloat=0privatevarcancellables=Set<AnyCancellable>()init(){NotificationCenter.default.publisher(for:UIResponder.keyboardWillChangeFrameNotification).map{notification->CGFloatinletframe=notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey]as?CGRect??.zeroreturnUIScreen.main.bounds.height-frame.origin.y}.assign(to:\.height,on:self).store(in:&cancellables)}}structContentView:View{@StateObjectvarkeyboard=KeyboardObserver()varbody:someView{VStack{Spacer()TextField("输入",text:.constant("")).textFieldStyle(.roundedBorder)}.padding(.bottom,keyboard.height).animation(.easeOut(duration:0.25),value:keyboard.height)}}
http://www.jsqmd.com/news/604522/

相关文章:

  • 【Scratch×AI 系列 07】流程使用(下):从 planX 到可导入的 .sb3(打包与自检)
  • 基于Vue的社区老年人健康管理与服务预约网站[vue]-计算机毕业设计源码+LW文档
  • 国际上靠谱的温变变色纱线公司有哪些 - 企业推荐官【官方】
  • 直播录制从未如此简单:StreamCap 40+平台自动录制全攻略
  • AI 驱动网络钓鱼主导数据泄露的机理、风险与防御体系研究 —— 基于阿联酋预警事件的实证分析
  • 从0到1学会使用PageHelper
  • 跨越平台鸿沟:在非ROS环境中通过Rosbridge与ROS 2 Humble高效通信
  • 超高效!这款音视频转文字神器,让你告别手动输入!
  • 【工业级Python内存治理白皮书】:覆盖CPython 3.8–3.12的7层内存管控架构,含可落地的监控-预警-自愈SOP手册
  • AI显微镜-Swin2SR惊艳效果展示:JPG噪点去除+边缘重构真实案例
  • 3步解锁视频自由:B站m4s缓存转MP4全攻略
  • 国际靠谱温变变色纱线公司哪家强? - 企业推荐官【官方】
  • STM32驱动AW9523B IO扩展芯片:从寄存器映射到多设备管理实战
  • 解锁Windows 10的Android生态:3大革新功能让跨设备体验无缝融合
  • AssetStudio终极指南:从Unity游戏中提取3D模型、纹理和音频资源的完整教程
  • 【仅限前500名开放】自动驾驶C++算法性能审计清单(含17项ASAM OpenSCENARIO兼容性检测项+Clang-Tidy定制规则集)
  • 家长必看!专业自闭症康复机构大揭秘 - 品牌测评鉴赏家
  • Dockerfile从零入门:手把手教你打包Node.js应用,解决镜像构建的常见坑
  • CVPR2022逆向蒸馏(Reverse Distillation)源码解读与复现:从One-Class Embedding到异常图生成
  • 夜光荧光发光纱线源头厂家直供 高亮持久价优打造吸睛爆款 - 企业推荐官【官方】
  • 基于Vue的社区医疗公益服务系统[vue]-计算机毕业设计源码+LW文档
  • 如何快速解决Hackintosh配置难题:OpCore-Simplify终极解决方案指南
  • Docker镜像推送到私有仓库完整指南:从命名规范到AWS ECR实战
  • AI辅助开发:借助快马多模型能力打造智能静电地板施工方案设计器
  • 自闭症机构大揭秘:如何为孩子找到最佳选择? - 品牌测评鉴赏家
  • 2026实测|5款AI自动生成PPT工具推荐,小白也能10分钟出专业稿 - 品牌测评鉴赏家
  • 国内专业温变纱线生产厂家该选哪家 - 企业推荐官【官方】
  • 科研人效率工具:如何用CiteSpace 6.3.R1快速梳理文献,找到你的论文创新点?
  • STM32F103C8T6 Bootloader跳转APP触发HardFault:中断管理不当的排查与修复
  • MBTI职业性格测试