4

在尝试将工作表与 iPhone X 的安全区域对齐时,我对 Xcode 非常陌生,它在工作表下方留下了一个透明区域。

有没有办法在不扩展工作表或在安全区域之外对齐的情况下设置该区域的填充?

在此处输入图像描述

4

2 回答 2

5

这是我的小扩展。如果有人可以建议改进不通过“幻数”标签访问添加的视图 - 欢迎!

extension UIViewController {

private static let insetBackgroundViewTag = 98721 //Cool number

func paintSafeAreaBottomInset(withColor color: UIColor) {
    guard #available(iOS 11.0, *) else {
        return
    }
    if let insetView = view.viewWithTag(UIViewController.insetBackgroundViewTag) {
        insetView.backgroundColor = color
        return
    }

    let insetView = UIView(frame: .zero)
    insetView.tag = UIViewController.insetBackgroundViewTag
    insetView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(insetView)
    view.sendSubview(toBack: insetView)

    insetView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    insetView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
    insetView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    insetView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true

    insetView.backgroundColor = color
}

}

于 2017-11-17T15:17:53.390 回答
4

是的,这不是一个好主意,但可以解决您的问题。

请按照以下步骤操作:

  • 启用“安全区域布局”
  • 创建/添加具有背景颜色的视图(即命名为bottomPaddingView)(以编程方式或使用情节提要),与您的工作表颜色相同。
  • 定位它(使用以下约束 - 以下约束不是代码结构,而只是显示约束/锚关系)
    - bottomPaddingView.bottom = self.view.bottom
    - bottomPaddingView.trailing = self.view.trailing
    - bottomPaddingView.leading = self .view.leading
    - bottomPaddingView.top = self.view.safeAreaLayoutConstraint.bottom // 如果你启用了'Safe Area Layout'
    - 或者bottomPaddingView.top = self.view.bottomLayoutguide // 如果你没有启用'Safe Area Layout布局'

现在使用淡入淡出动画隐藏/取消隐藏您bottomPaddingView的行动船可见性。

于 2017-10-23T04:52:03.373 回答