在看到视图之前添加约束?

Add constraint before view is seen?

我正在尝试以编程方式使用约束使带有 width = 40 的箭头按钮居中。

如果我在 viewDidAppear 中调用它,我的代码可以正常工作,但在 viewDidLoad 中崩溃。

将它放在 viewDidAppear 中是一种眼睛疼痛,因为您看到屏幕然后看到按钮跳到屏幕中间。知道如何制作它在显示视图之前设置好了吗?

我可能会补充说这是一个子视图,所以我从 viewController 调用 centerArrow(),其视图不是同一个视图。

所以在 viewController 里面:

let pview = NSBundle.mainBundle().loadNibNamed("Profile", owner: nil, options: nil)[0] as! ProfileView


override func viewDidAppear(animated: Bool) {
    pview.centerArrow()
}

并在 ProfileView 内继承 UIView:

func centerArrow()
{
    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let width = (screenSize.width / 2) - 20
    let constraint = NSLayoutConstraint(item: arrowButton, attribute: NSLayoutAttribute.LeftMargin, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.LeftMargin, multiplier: 1, constant: width)
    self.addConstraint(constraint)
}

尝试使用 viewDidLayoutSubViews,这可能会提供您在这种情况下寻找的时间。