IQKeyboardManager 设置 keyboardDistance 后 距离总是感觉比实际的大很多。之前都忽略了这个问题。
今天看了一下源码,
IQKeyboardManager 计算键盘高度的时候会增加一个safeArea.bottom. 实际键盘高度已经包含了safeArea.bottom。
第二个原因。IQKeyboardManager会适配directionalLayoutMargins布局。弹出键盘时,textfield父视图移动会考虑directionalLayoutMargins.bottom的距离, textView父视图移动没有考虑。 不知道为什么。
而系统directionalLayoutMargins会自动从safeArea获取。
可以使用 [UIView appearance].insetsLayoutMarginsFromSafeArea = false; // 禁用系统directionalLayoutMargins自动从safeArea获取, 避免IQKeyboardManager 对 textfield 距离叠加
或者单独页面单独设置
所以
[UIView appearance].insetsLayoutMarginsFromSafeArea = false;
if (kSafeAreaBottom > 0) {
[IQKeyboardManager shared].keyboardDistance = 30-kSafeAreaBottom;
} else {
[IQKeyboardManager shared].keyboardDistance = 30;
}
这样设置带不带安全区域的textField到键盘的距离都一样了。 试了几个手机没问题了
记录一下我的IQKeyboardManagerSwift的设置
[UIView appearance].insetsLayoutMarginsFromSafeArea = false; // 禁用系统directionalLayoutMargins自动从safeArea获取, 避免IQKeyboardManager 对 textfield 距离叠加
[[IQKeyboardManager shared] setIsEnabled:true];
[IQKeyboardManager shared].resignOnTouchOutside = true;
if (kSafeAreaBottom > 0) {
// IQKeyboardManager 键盘高度计算时增加了个kSafeAreaBottom, 系统键盘高度会自动加上kSafeAreaBottom,不需要IQKeyboardManager再增加一个了
[IQKeyboardManager shared].keyboardDistance = 30-kSafeAreaBottom;
} else {
[IQKeyboardManager shared].keyboardDistance = 30;
}
[IQKeyboardToolbarManager shared].isEnabled = true;
IQKeyboardToolbarConfiguration *barConfig = [IQKeyboardToolbarManager shared].toolbarConfiguration;
barConfig.previousNextDisplayMode = IQPreviousNextDisplayModeAlwaysHide;
IQKeyboardToolbarPlaceholderConfiguration *placeholderConfig = barConfig.placeholderConfiguration;
placeholderConfig.showPlaceholder = false;
IQBarButtonItemConfiguration *doneConfig = [[IQBarButtonItemConfiguration alloc] initWithTitle:@"Done" action:nil];
barConfig.doneBarButtonConfiguration = doneConfig;