以编程方式针对UIView上的safeAreaLayoutGuide设置约束

时间:2019-06-25 19:14:37

标签: ios swift5

我正在尝试通过编程方式针对“ safeAreaLayoutGuide”设置约束,但似乎UIView的“ init”方法中没有safeArea。

required init(foo: foo) 
{
    super.init(frame: .zero)

    self.addSubview(contentView)

    var layoutGuide: UILayoutGuide = self.layoutMarginsGuide
    if #available(iOS 11, *) {
        layoutGuide = self.safeAreaLayoutGuide
    }

    NSLayoutConstraint.activate([
        contentView.topAnchor.constraint(equalTo: layoutGuide.topAnchor),
        contentView.rightAnchor.constraint(equalTo: layoutGuide.rightAnchor),
        contentView.leftAnchor.constraint(equalTo: layoutGuide.leftAnchor),
        contentView.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor)
    ])

    self.layoutIfNeeded()
}

因此,在设置了这些约束后,“ layoutGuide”的框架为{{0, 0}, {0, 0}},因此很明显这里有些问题(除非在iOS 11以下的设备上如此)。

我尝试覆盖safeAreaInsetsDidChange函数,并在那里设置约束,但是似乎该函数为时已晚,例如视图最初是错误的,然后正确更新了

我应该在哪里/何时在UIView上设置约束?

1 个答案:

答案 0 :(得分:0)

您可以在viewDidLoad方法内设置视图,而不是init