在iOS11上的键盘后面扩展UIScrollView插件

时间:2017-10-03 15:08:33

标签: swift uiscrollview ios11

自Apple推出safe area insetsadjusted content insets以来,已经正常工作的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

但它看起来很难看。也许有内置的方法来扩展键盘后面的插图?

1 个答案:

答案 0 :(得分:1)

显然,答案在官方文档中。我们应该将这些内容委托给控制器并处理它的安全区域插入,而不是手动调整内容插入。所以,这是工作代码:

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)
    })
}