覆盖iOS故事板约束

时间:2015-10-12 00:23:11

标签: ios swift uitableview uiscrollview

如何更改故事板中设置的约束?

我正在尝试模仿Twitter iOS个人资料页面,当您向下滚动时标题会缩小。

我有一个占用整个视图的UIScrollView。然后我在UIScrollView中有一个UITableView。在故事板中,我必须为UITableView设置一个固定的高度。因此具有等于高度= 350的约束。

然后我尝试以编程方式更改它的高度:

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

当我这样做时,它根本不会影响UITableView的大小。我假设这是因为故事板限制。

我是否遗漏了某些内容,或者我是否需要以编程方式开始?

1 个答案:

答案 0 :(得分:11)

不要与Storyboard中设置的约束作斗争。相反,您可以通过在文档大纲视图和控件中找到它来为高度约束创建@IBOutlet - 从约束到代码的挖掘。给它命名为tableHeightContraint

@IBOutlet weak var tableHeightConstraint: NSLayoutConstraint!

然后,当您想要更改UITableView的高度时,请修改约束的constant属性:

tableHeightConstraint.constant = scrollView.frame.height - 30

正如@BlackRider在评论中指出的那样,有时需要在更改约束后触发布局。

通话:

view.layoutIfNeeded()

将告诉Auto Layout在需要时应用约束。如果您要为更改设置动画,则尤其如此。在这种情况下,layoutIfNeeded()调用是在动画块内进行的。

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