出现键盘时,UITableViewController如何更改表视图的“ adjustedContentInsets”?

时间:2018-07-26 22:20:40

标签: ios uitableview uiscrollview uitextfield

当由UITableViewController控制的UITableView中包含带有文本字段的单元格时,如果用户点击文本字段,则表格视图会滚动以将文本字段保持在键盘上方。

它是如何做到的?我试图通过一堆日志来实现此方法来弄清楚:

override func scrollViewDidChangeAdjustedContentInset(_ scrollView: UIScrollView) {
    print("did adjust")
    print("contentInset", self.tableView.contentInset)
    print("indicatorInsets", self.tableView.scrollIndicatorInsets)
    print("adjustedContentInsets", self.tableView.adjustedContentInset)
    print("safe area", self.tableView.safeAreaInsets)
    print("additional safe area", self.additionalSafeAreaInsets)
}

这是点击滚动之前和之后的输出:

did adjust
contentInset UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
indicatorInsets UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
adjustedContentInsets UIEdgeInsets(top: 64.0, left: 0.0, bottom: 0.0, right: 0.0)
safe area UIEdgeInsets(top: 64.0, left: 0.0, bottom: 0.0, right: 0.0)
additional safe area UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

did adjust
contentInset UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
indicatorInsets UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
adjustedContentInsets UIEdgeInsets(top: 64.0, left: 0.0, bottom: 253.0, right: 0.0)
safe area UIEdgeInsets(top: 64.0, left: 0.0, bottom: 0.0, right: 0.0)
additional safe area UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

滚动后,bottom中的adjustedContentInsets已更改。但是如何?这不是可设置的属性。应该对安全区域做出响应,但是安全区域没有改变。 contentInset尚未更改。这是如何完成的?如何使用自己的滚动视图执行相同的操作? (我目前的解决方案是更改contentInset,但显然,表视图控制器不必这样做。)

0 个答案:

没有答案