0
我正在使用以下代码更改按钮的约束。通常,如果我将它放在viewDidAppear函数上,但用户首先看到非约束按钮,则按钮移动到正确的位置。更改桌面视图中的按钮约束条件
如果我把代码放在viewDidLoad或viewWillAppear中,那么当这两个函数运行时,应用程序会崩溃,因为没有表。
如何在视图显示给用户之前更改约束条件?
//in class definition, outlet for the constraint
@IBOutlet weak var dateLabelLeft: NSLayoutConstraint!
//code in viewDidLoad, viewDidAppear, viewWillAppear function
if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
dateLabelLeft = NSLayoutConstraint(item: dateLabel, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1, constant: 200)
} else {
dateLabelLeft = NSLayoutConstraint(item: dateLabel, attribute: .Left, relatedBy: .Equal, toItem: self.view, attribute: .Left, multiplier: 1, constant: 100)
}
异常详细信息:
歇上warnBlockingOperationOnMainThread()来调试。 2015-11-26 13:54:10.865 testApp [56180:2698380]无法同时满足约束条件。
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it. (
"<NSLayoutConstraint:0x7fc9d85820a0 UITableView:0x7fc9d88e7400.leading == UIView:0x7fc9d8559740.leadingMargin - 20>",
"<NSLayoutConstraint:0x7fc9d8585060 H:|-(0)-[UITableView:0x7fc9d88e7400](LTR) (Names: '|':UIView:0x7fc9d8559740)>")
尝试将其添加到'viewWillLayoutSubviews()' –
'viewWillAppear'中不存在哪个项目? 'dateLabel'?或'self.view'?你什么时候创建它? viewWillAppear和viewDidAppear之间的可用对象应该没有区别。什么是崩溃? – Paulw11
嗨,你是否检查dateLabel和self.view是否存在?你能分享控制台的日志吗?如果有例外 - 你能显示它的文字吗? – NixSolutionsMobile