Ios 《安全区布局指南》';t在情节提要中为UITableViewController工作

Ios 《安全区布局指南》';t在情节提要中为UITableViewController工作,ios,uitableview,uistoryboard,iphone-x,safearealayoutguide,Ios,Uitableview,Uistoryboard,Iphone X,Safearealayoutguide,似乎UITableViewController没有安全区域布局指南,无法在iPhone X中将桌面视图的顶部和底部边距设置为与底部布局相匹配,所有视图控制器都可以与故事板中的安全区域布局指南配合使用,用于顶部和底部边距。除UITableView控制器外,请帮助解决此问题 为了便于参考,我附上了iPhoneX的截图。在这里,您可以看到字符串“小麦”不适合底部安全区域的内部 我相信这种情况会发生,因为视图控制器的视图(总是占据整个屏幕大小)是表视图 使用UIViewController并在其视图下添

似乎UITableViewController没有安全区域布局指南,无法在iPhone X中将桌面视图的顶部和底部边距设置为与底部布局相匹配,所有视图控制器都可以与故事板中的安全区域布局指南配合使用,用于顶部和底部边距。除UITableView控制器外,请帮助解决此问题

为了便于参考,我附上了iPhoneX的截图。在这里,您可以看到字符串“小麦”不适合底部安全区域的内部


我相信这种情况会发生,因为视图控制器的视图(总是占据整个屏幕大小)是
表视图

使用
UIViewController
并在其
视图下添加一个表视图(并添加约束以尊重底部安全区域)

使用以下选项设置表视图内容插图:

tableView.contentInset = UIEdgeInsetsMake(0, 0, UIApplication.shared.keyWindow!.safeAreaInsets.bottom, 0.0);
如果您在11下使用后者和目标iOS版本,请确保使用以下工具进行验证:

     var safeAreaBottom: CGFloat = 0.0 
     if #available(iOS 11.0, *) {
         safeAreaBottom = UIApplication.shared.keyWindow!.safeAreaInsets.bottom
     }

     tableView.contentInset = UIEdgeInsetsMake(0, 0, safeAreaBottom, 0.0);
我还注意到ios11中的
tableview
的这个属性(但没有说明:/):
insetContentViewstoSafeArea


我还没试过,但你可以试一下。也许这就是您需要的开箱即用

这是我当前的修复方法,用于在
UITableViewController
中强制设置顶部和底部安全区域。首先,您必须将其嵌入
UINavigationController
(如果不需要,请隐藏导航栏),然后:

令人遗憾的是,我们不得不编写所有这些代码,所以如果有人知道更简单的实现方法,请告诉我们

另外,我在这里使用了这个小型的
UIView
扩展:

extension UIView {
    func addSubview(_ child: UIView, constraints: [NSLayoutConstraint]) {
        addSubview(child)
        child.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate(constraints)
    }
}

我尝试将内容视图插入安全区域,但似乎没有帮助。根据这一点,默认情况下它是“true”。但是按照您的示例设置
tableView.contentInset
会很有魅力!你确定这在iOS 12.2中仍然有效吗?我不能让它工作。当将
insetContentViewstoSafeArea
设置为
false
时,它也不起作用。
extension UIView {
    func addSubview(_ child: UIView, constraints: [NSLayoutConstraint]) {
        addSubview(child)
        child.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate(constraints)
    }
}