2015-11-26 40 views
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)>") 
+0

尝试将其添加到'viewWillLayoutSubviews()' –

+0

'viewWillAppear'中不存在哪个项目? 'dateLabel'?或'self.view'?你什么时候创建它? viewWillAppear和viewDidAppear之间的可用对象应该没有区别。什么是崩溃? – Paulw11

+0

嗨,你是否检查dateLabel和self.view是否存在?你能分享控制台的日志吗?如果有例外 - 你能显示它的文字吗? – NixSolutionsMobile

回答

0

试试这个:

  1. 在Xcode中创建常数,在文件检查器
  2. 将来自文件检查器(控制+拖动)您的约束,并在您创建了一个出口
  3. 后来viewDidLoad只是类型your_constraint.constant = 200

就是这样。

相关问题