UITableViewController 和安全区

Posted

技术标签:

【中文标题】UITableViewController 和安全区【英文标题】:UITableViewController and safe area 【发布时间】:2020-06-17 23:44:59 【问题描述】:

我正在使用UITableViewController 的子类来支持我非常简单的表格视图控制器。像这样:

class FriendsViewController: UITableViewController 


    override func viewDidLoad() 
        super.viewDidLoad()

        tableView.insetsContentViewsToSafeArea = true

    

但是,表格视图覆盖了安全的安全区域。当我在 iPhone X 模拟器上预览时,这一点尤其明显。

我希望看到这样的东西:

我尝试使用tableView.insetsContentViewsToSafeArea,按照我上面的代码 sn-p,但它没有按照 Apple 文档所说的那样做:

当此属性的值为 true(默认值)时,表格视图会在其每个单元格、页眉和页脚中调整内容视图在前导和尾随的插入,以使内容适合安全区域。

我知道没有UITableViewController 的替代解决方案,但我特别想使用它(它非常方便)并且希望能够对其进行调整,使其行为正常并观察安全区域。令人难以置信的是,Apple 设计了一个损坏的组件。

无论如何,类似问题的帖子都没有帮助,所以希望有一个新的开始。

【问题讨论】:

【参考方案1】:

您看到的是正常且正确的。表格视图是视图控制器的整个视图,覆盖了整个屏幕。它仍然可以正常工作,因为滚动内容是插入的,因此用户可以滚动查看表格的所有部分;桌子的顶部向下嵌入。所以一切都很好。

如果您真的想要上一个屏幕截图中显示的效果,您必须将表格视图控制器设置为其他视图控制器的子视图控制器。典型的界面是将表格视图控制器包装在导航控制器中,以便导航栏填满屏幕顶部。或者您可以手动使用容器视图/嵌入 segue。

【讨论】:

感谢您的反馈。不,不是真的想改变任何默认的 UITableViewController 行为,只要它在安全方面是正确的。此外,我终于有足够的头脑在Apple官方网站上查看了一个示例,并且表格确实一直流到主页指示器下方的屏幕底部(黑色短线):developer.apple.com/documentation/uikit/views_and_controls/…但我仍然没有理解。我认为安全区的重点是确保那里没有任何东西出现 - 不是吗? 不是“什么都没有”。子视图。但是您的表格视图不是子视图。我只能建议您重新阅读我的答案。视图控制器的视图,如果不是子视图控制器,则始终占据整个屏幕。这就是当你决定使用非子表视图控制器时得到的结果。我告诉过你让它成为孩子的两种常见方法。基本上现在我已经重复了我的整个答案作为评论。 我了解嵌入或放置在导航控制器中的要点。就像我说的那样,并不是真的要修改默认布局,因为我们已经确定它不会违反安全区域约束。我不明白为什么表格视图(或任何其他视图控制器的“基本”视图,占据整个屏幕)进入屏幕底部的安全区域被认为是可以的。我想这是因为 ios“知道”将其放置为不包括基本控件,例如家庭或时间/信号指示器。 IE。 这些控制之下。 我要说第三遍?全屏视图控制器的视图占据全屏。这就是你所拥有的。表视图不是子视图。这是风景。

以上是关于UITableViewController 和安全区的主要内容,如果未能解决你的问题,请参考以下文章

iPhone x 上的 UITableViewController 顶栏

UITableViewController 和 NavigationController

UIViewController 和 UITableViewController 有啥区别

Swift:UITableViewController - 修改 UITableView 和 View Controller 之间的边距

IOS 教你玩转UITableViewController和TableView

UITableViewController - 单元格大小分隔符和背景色