2015-10-12 82 views
4

如何更改Storyboard中设置的约束?重写iOS Storyboard约束

我想模仿Twitter的iOS个人资料页面,其中标题缩小,当你向下滚动。

我有一个UIScrollView占用整个视图。然后我在UIScrollView中有一个UITableView。在故事板内,我必须为UITableView设置一个固定的高度。所以有约束得出高度= 350

然后我试图以编程方式改变它的高度:

tableView.frame = CGRectMake(0, 0, scrollView.frame.width, scrollView.frame.height - 30) 

当我做到这一点并没有在所有影响的UITableView的大小。我假设这是因为故事板的限制。

我错过了什么,或者我需要以编程方式做到这一点开始?

回答

9

不要与故事板中设置的约束作斗争。相反,您可以在文档提纲视图视图和控件中找到它,以便从约束缩小到您的代码中,从而创建@IBOutlet到高度限制。给它起一个名字,如tableHeightContraint

@IBOutlet weak var tableHeightConstraint: NSLayoutConstraint! 

然后,当你想改变UITableView的高度,修改约束的constant属性:

tableHeightConstraint.constant = scrollView.frame.height - 30 

由于@BlackRider在评论中指出,有时需要触发约束条件发生变化后的布局。

呼叫:

view.layoutIfNeeded() 

会告诉自动布局做,如果需要的应用约束。如果您正在为变更制作动画,则尤其如此。在这种情况下,layoutIfNeeded()调用在动画块内进行。

UIView.animateWithDuration(2) { 
    self.view.layoutIfNeeded() 
} 
+1

很好的答案。另外,有时在更改约束后需要强制布局。例如:'view.layoutIfNeeded()'。如果您正在为约束更改制作动画,这一点尤其重要。在这种情况下,需要在动画块中调用'layoutIfNeeded'。 – Macondo2Seattle