结构:
的UIView
基本视角
自动版式
- 中心X
- 中心Y
- 等宽度到SafeView
- SafeView的平等高度
醇>
的UIView
InnerView(BaseView的子视图)
自动版式
- 领导
- 尾随
- 顶
- 底部(创建名为“bottomLayoutConstraint”的IBOutLet)
醇>
- (void)keyBoardWillShow:(NSNotification *)notification {
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
self.bottomLayoutConstraint.constant = CGRectGetHeight(keyboardFrame);
[self.view layoutIfNeeded];
}
- (void)keyBoardWillHide:(NSNotification *)notification {
self.bottomLayoutConstraint.constant = 0.0;
}
键盘出现时,为什么Keyboard
和InnerView
之间存在差距?
修改
应用Aleksander Maj的解决方案后,差距缩小到5px
修改
这是我的View层次结构截图
答案 0 :(得分:2)
CGRectGetHeight(keyboardFrame)
返回从屏幕底边计算的键盘高度。同时,您的bottomLayoutConstraint
固定在 BaseView
的安全区域的底边(与屏幕的下边缘不同) 。这两个水平向导之间的差异是你的差距的高度。
您应该按以下方式计算bottomLayoutConstraint
的常量:
if (@available(iOS 11, *)) {
self.bottomLayoutConstraint.constant = CGRectGetHeight(keyboardFrame) - self.view.safeAreaInsets.bottom
} else {
self.bottomLayoutConstraint.constant = CGRectGetHeight(keyboardFrame)
}
至少我怀疑的是这个。我没有重现你的视图层次结构。
编辑:
您可以粘贴视图层次结构的屏幕截图(扩展了所有约束)吗?我认为你的5pt差距问题可能与不正确的约束常数值有关。
编辑2: