为什么当视图控制器的根视图布局边距为 16 时,UITableView 单元格分隔符 Inset 默认为 15?



在iPhone 6s上,当我将单元格分隔符左插入设置为14时,显示为15,我认为这是因为它默认设置了preservesSuperviewLayoutMargins = true

但来自苹果文档:"侧边边距根据控制器的显示方式和位置而不同,但可以是16或20点(取决于设备)。你不能更改这些边距。"

当我通过自动布局将视图添加到根视图的一侧,并设置preservesSuperviewLayoutMargins = true时,在iPhone 6s上,从根视图的边缘到我添加的视图的距离为16,因此它不与表视图的左边缘对齐。UITableViewCell如何使用preservesSuperviewLayoutMargins = true,并且侧边距是15,而不是16?

经过一些日志,我知道为什么,那是因为:

tableView.preservesSuperviewLayoutMargins = false

在iPhone 6上,表View的layoutMargins是(8,15,8,15);(8,20,8,20)在iPhone 6 Plus上。

在苹果的文档上,只写着:"默认的边距是每边8分。你可以根据应用程序的需要修改这些边距。"

但在viewDidLoad()上,表视图的layoutMargins是(8,8,8),然后在iPhone 6上更改为(8,15,8,15)。

当我想将视图左对齐添加到表视图,并且子视图的左边缘左对齐到表视图分隔线时,这非常令人困惑。我不得不这样更新视图:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    totalBar.preservesSuperviewLayoutMargins = tView.preservesSuperviewLayoutMargins
    totalBar.layoutMargins = tView.layoutMargins
}

这样我就不需要对6和6 Plus的保证金值进行硬编码,甚至苹果也不需要在未来更改该值。

最新更新