【问题标题】:Constraints messing up frame size限制帧大小
【发布时间】:2014-10-05 23:18:28
【问题描述】:

我使用下面这行代码来设置按钮的大小:

self.toolsButton.frame.size = CGSizeMake(190, 40)

一切都很好,直到我添加以下布局约束:

var constrainToCenter = NSLayoutConstraint(item: toolsButton, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1.0, constant: 0.0)

self.view.addConstraint(constrainToCenter)

据我了解,此约束代码将按钮与视图水平居中,但为什么会对帧大小产生影响?如何在保持帧大小的同时也有约束?

【问题讨论】:

    标签: ios layout swift ios8


    【解决方案1】:

    您可以添加高度和宽度约束来强制按钮的大小。

    如果您使用约束,最好您的约束完全定义元素的大小和位置。 当您只为一个属性添加约束时,它可能会与默认的系统约束发生冲突。


    编辑 - 更多信息:

    如果您在代码中创建视图,view.translatesAutoresizingMaskIntoConstraints 属性应默认为 YES。

    这意味着系统会自动为其添加约束。并且可能它们与您手动添加的约束冲突。

    所以我认为这里最好的解决方案是设置

    view.translatesAutoresizingMaskIntoConstraints = NO
    

    然后手动添加4个约束:

    • 水平位置
    • 垂直位置
    • 身高
    • 宽度

    当您不需要创建任何特定约束时,只需将该选项保留为“是”,系统将创建约束以强制执行您设置的框架,通常这就足够了。

    【讨论】:

    • 所以从本质上讲,约束会否决对相关属性所做的其他更改,即使约束不直接处理该属性?
    • 我用一些更好的信息编辑了答案。
    猜你喜欢
    • 2014-01-06
    • 2019-02-02
    • 2017-05-05
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2010-12-29
    • 2012-10-16
    相关资源
    最近更新 更多