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 之间的边距