iOS是否有类似Android windowSoftInputMode的内置键盘交互管理方案?
iOS键盘与UI交互的原生解决方案(替代手动监听通知)
iOS没有和Android windowSoftInputMode完全一致的全局配置项,但有几个原生组件和属性可以帮你实现「自动上推UI/让键盘重叠UI」的效果,不用手动监听键盘通知或修改约束:
1. 利用UIScrollView及其子类的contentInsetAdjustmentBehavior
如果你的界面核心是UIScrollView(或它的子类UITableView、UICollectionView),iOS默认会自动处理键盘交互:
- 当键盘弹出时,系统会自动调整scrollView的内边距,让内容上移避免被遮挡,对应Android的
adjustResize效果。 - 要是你想让键盘直接重叠内容,只需把
contentInsetAdjustmentBehavior设为.never:
保持默认的scrollView.contentInsetAdjustmentBehavior = .never.automatic则会自动上推内容。
2. iOS15+ 使用UIKeyboardLayoutGuide
这个布局指南是专门用来处理键盘与UI元素的位置关系的,不用写任何键盘监听代码:
- 如果你想让底部按钮等UI元素被键盘上推,直接把元素的底部约束绑定到
view.keyboardLayoutGuide.topAnchor:button.bottomAnchor.constraint(equalTo: view.keyboardLayoutGuide.topAnchor, constant: 16).isActive = true - 要是想让键盘重叠元素,还是把约束绑定到
view.bottomAnchor就行,完全不用管键盘的状态。
3. 旧版本兼容:automaticallyAdjustsScrollViewInsets(iOS11及以下)
在iOS11之前,视图控制器的automaticallyAdjustsScrollViewInsets属性默认是true,会自动调整scrollView的内边距适配键盘。如果设为false,键盘就会直接覆盖scrollView的内容。不过这个属性在iOS11之后已经被contentInsetAdjustmentBehavior替代,建议优先用新API。
补充说明
如果你的界面布局特别复杂(比如混合了多种非scrollView组件),上述原生方案可能覆盖不到,这时候才需要手动监听UIResponder.keyboardWillShowNotification这类通知来调整约束或frame。但大部分基础场景,用上面的方法已经足够省掉手动管理的麻烦。
内容的提问来源于stack exchange,提问作者Jomar Spanhol
相关产品推荐
相关产品推荐

