iOS:以编程方式更改UIView的高度约束

33

我想知道是否有一种编程方式可以获取特定 UIView 的高度约束并在代码中更改其值? 我的情况是,我在 IB 中将几个 UIViews 的四个边缘固定,并添加了高度约束(如果不这样做,IB 就会报错),但在程序的中间部分,我需要更改 UIViews 的高度,并导致某些 UIViews 向下推入视图中。

我知道我可以通过 ctrl+拖动 每个 UIViews 的高度约束,并在代码中更改它们的值,但这样做需要我连接数十个约束。因此,我认为这种方式不是有效的,也不是可扩展的。

所以,我想知道是否有一种通过代码完全获取特定视图的高度约束并动态更改其值的方法?

谢谢!

2个回答

42

首先在你的.h文件中添加高度约束:

//Add Outlet     
IBOutlet NSLayoutConstraint *ViewHeightConstraint;

接下来,将以下代码添加到您的.m文件中:

然后,将以下代码添加到您的.m文件中:

//Set Value From Here   
ViewHeightConstraint.constant = 100;

我已经做了完全相同的事情,但是在视图内部有一些文本和标签,它们有高度约束。当我将wrapperViewHeight设置为零时,它的子视图并没有隐藏,我希望它们能够随着视图一起隐藏,并且下面的其他视图会自动向上调整。 - Nitesh
@Nitesh,您可以将视图隐藏在Containerview内。并且在将wrapperview的高度约束设置为零时,将bottomviews向上移动。 - Bhavin Chauhan
1
在Storyboard/Xib中,将视图的绘制属性“剪裁子视图”设置为开启。这样可以剪切视图框架外的部分,从而获得所需的效果。 - MQoder
我没有xib文件,如何在代码中获取outlet。 - newszer

41

您可以像这样从界面构建器将该特定约束条件连接到您的代码中:

enter image description here

NSLayoutConstraint有一个常量属性,需要设置您的常量固定值。

如果您正在以编程方式添加约束,则可以从 NSLayoutConstraint 类中受益于标识符属性。设置它们并迭代它们以获取特定的标识约束。

正如文档所说:

extension NSLayoutConstraint {
    /* For ease in debugging, name a constraint by setting its identifier, which will be printed in the constraint's description.
     Identifiers starting with UI and NS are reserved by the system.
     */
    @availability(iOS, introduced=7.0)
    var identifier: String?
}

谢谢您的快速回答。我知道这种方法,但我想知道是否可以通过编程方式实现?因为我有大量的视图和子视图,逐个连线会使整个界面看起来非常混乱且难以维护。 - Marcus
如果您正在以编程方式添加约束,则可以从NSLayoutConstraint类中的标识符属性中受益。设置它们并迭代它们以获取特定的标识约束。 - Ashraf Tawfeeq
哇..这可能就是我在找的那个。等我回到我的Mac上试试看。非常感谢你的帮助! - Marcus
这对于iOS Swift来说是一样的,对吧?只是确认一下。 - mding5692
@mding5692 是的,它会。 - Ashraf Tawfeeq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接