当由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
,但显然,表视图控制器不必这样做。)