IQKeyboardManagerSwift 黑框问题
2018-07-06 本文已影响111人
九龙
问题:
在使用IQKeyboardManagerSwift时,如果自定义了UINavigationController,并设置了navigationBar.isTranslucent = false 即导航栏不透明,如果页面弹出键盘后再返回,就会发现返回的时候ViewController的视图往下移了,出现一条逐渐变高的黑框
如果在viewDidLoad里面设置了textField.becomeFirstResponder() push出界面后,在点击关闭键盘就会出现底部有一条黑框
分析:
以上分析了未收起键盘的时候的视图层级结构发现:如图
收起键盘后的视图层级结构发现:
发现ViewController整体上移了64px,所以下方出现了黑框
分析:从iOS7开始,UIViewController默认使用全屏布局,并增加了edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets及extendedLayoutIncludesOpaqueBars这三个属性用于控制布局,相信就不再介绍了看别人的对比:edgesForExtendedLayout、automaticallyAdjustsScro... - 简书
解决方法:
如果是使用的storyboard直接勾选控制器的 Under Opaque Bars 选项即可
如果是代码在viewDidLoad方法里面 extendedLayoutIncludesOpaqueBars = true即可
如果控制器太多,我想到的最直接的是在自定义的UINavigationController的重写pushViewController方法里面设置
viewController.extendedLayoutIncludesOpaqueBars = true
即可