在看到视图之前添加约束?
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
,这可能会提供您在这种情况下寻找的时间。
我正在尝试以编程方式使用约束使带有 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
,这可能会提供您在这种情况下寻找的时间。