最初我将容器的高度设置为75.但在viewWillLoad
上,我想更新此值并设置为width / 5
。
为此我试试:
containerHeight = NSLayoutConstraint(item: container, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: width / 5)
container.addConstraint(containerHeight)
此外:
containerHeight.constant = width / 5
但两种变体都不会更新我的约束。它仍然让我回报75.怎么了?
答案 0 :(得分:4)
如果您已经在故事板中创建了现有约束,则可以添加IBOutlet
并更改其常量,不要创建新的...
并将您的代码放入viewDidLayoutSubviews()
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
constraint.constant = 10 // Just to test and see it really works 75 -> 10
self.view.layoutIfNeeded() // If iOS 7
// I think constraints are updated after this function and you wont see a change in the frame.height until it has ran. Put your print in an async and you'll see the updated frame.
dispatch_async(dispatch_get_main_queue()) {
print(view.frame.height)
}
}
答案 1 :(得分:0)
两件事。要么是在4.7英寸屏幕的设备或模拟器上进行测试。其宽度/ 5 = 375 / 5.0 = 75。
或者,在viewWillLoad中,您获得的宽度是storyboard视图宽度,而不是实际的设备视图宽度。
尝试将其位置更改为viewWillAppear并调用layoutIfNeeded。或尝试获取屏幕宽度而不是视图框架。
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
使用以下方法:
containerHeight.constant = width / 5
另一个是错的。
答案 2 :(得分:0)
您应该在viewDidLayoutSubviews中更改约束常量而不是viewWillLoad - viewWillLoad表示视图未加载,因此约束也不是