Swift 在iOS11上扩展键盘后面的UIScrollView插图
自从苹果公司推出了Swift 在iOS11上扩展键盘后面的UIScrollView插图,swift,uiscrollview,ios11,Swift,Uiscrollview,Ios11,自从苹果公司推出了安全区域插页和调整内容插页以来,已经在运行的UI布局代码就被破坏了。在我的例子中,当键盘出现时,UIScrollView底部插入会扩展: func keyboardWillResize(_ notification: Notification) { let info: [AnyHashable: Any] = notification.userInfo! let keyboardTop = self.view.frameOnScreen.maxY - (info
安全区域插页
和调整内容插页
以来,已经在运行的UI布局代码就被破坏了。在我的例子中,当键盘出现时,UIScrollView底部插入会扩展:
func keyboardWillResize(_ notification: Notification) {
let info: [AnyHashable: Any] = notification.userInfo!
let keyboardTop = self.view.frameOnScreen.maxY - (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.y
UIView.animate(withDuration: 0.3, animations: {
self.tableView.contentInset.bottom = keyboardTop
self.tableView.scrollIndicatorInsets = self.tableView.contentInset
})
}
在iOS 11中,当键盘出现时,该代码会产生额外的插入,相当于选项卡栏的高度。这很明显,因为现在contentInset
只表示用户定义的插入,而真正的插入由iOS 11中引入的adjustedContentInset
表示
所以我的问题是如何妥善处理这个案件?有写的选项
self.tableView.contentInset.bottom = keyboardTop - self.tableView.adjustedContentInset.bottom
但是它看起来很难看。也许有内置的方法来扩展键盘后面的插入部分?显然,答案在官方文档中。我们不应该手动调整内容插入,而应该将这些内容委托给view controller,并处理它的安全区域插入。下面是工作代码:
func keyboardWillResize(_ notification: Notification) {
let info: [AnyHashable: Any] = notification.userInfo!
let keyboardTop = self.view.frameOnScreen.maxY - (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.y
UIView.animate(withDuration: 0.3, animations: {
self.additionalSafeAreaInsets.bottom = max(keyboardTop - self.view.safeAreaInsets.bottom, 0)
})
}