【问题标题】:Overriding iOS Storyboard Constraints覆盖 iOS 故事板约束
【发布时间】:2016-01-09 08:50:20
【问题描述】:

如何更改情节提要中设置的约束?

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

我有一个 UIScrollView 占据了整个视图。然后我在 UIScrollView 中有一个 UITableView。在情节提要中,我必须为 UITableView 设置一个固定的高度。 Equals Height = 350 的约束也是如此。

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

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

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

我是否遗漏了什么,还是需要以编程方式开始?

【问题讨论】:

    标签: ios swift uitableview uiscrollview


    【解决方案1】:

    不要与情节提要中设置的约束作斗争。相反,您可以通过在 Document Outline 视图中找到高度约束并在 control 中找到高度约束来创建一个@IBOutlet - 从约束拖动到您的代码。给它起一个名字,比如tableHeightContraint

    @IBOutlet weak var tableHeightConstraint: NSLayoutConstraint!
    

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

    tableHeightConstraint.constant = scrollView.frame.height - 30
    

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

    调用:

    view.layoutIfNeeded()
    

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

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

    【讨论】:

    • 好答案。此外,有时需要在更改约束后强制布局。例如:view.layoutIfNeeded()。如果您正在为约束更改设置动画,这一点尤其重要。在这种情况下,layoutIfNeeded 需要在动画块中调用。
    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2015-02-13
    • 2016-06-27
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多