【问题标题】:iOS: Programmatically change height constraint of a UIViewiOS:以编程方式更改 UIView 的高度约束
【发布时间】:2015-04-02 08:27:37
【问题描述】:

我想知道有没有办法以编程方式检索特定UIView 的高度约束并在代码中更改其值?我有一种情况,我有几个UIViews,四个边缘固定在 IB 中并添加了高度限制(如果我没有,IB 会抱怨),但在程序中间我需要更改 UIViews 的高度并导致一些UIViews 在视图中被向下推。

我知道我可以ctrl+拖动每个UIViews 的高度限制并在代码中更改它们的值,但这样做需要我连接几十个。所以我认为这在某种程度上效率不高且不可扩展。

所以我想知道有没有办法通过代码完全检索特定视图的高度约束并动态更改它?

谢谢!

【问题讨论】:

    标签: ios iphone xcode-storyboard


    【解决方案1】:

    首先将高度限制添加到您的.h 文件中:

    //Add Outlet     
    IBOutlet NSLayoutConstraint *ViewHeightConstraint;
    

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

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

    【讨论】:

    • 我做了完全相同的事情,但在视图内部有一些文本和标签有高度限制。当我将 wrapperViewHeight 设置为零时,它的子视图没有隐藏,我希望它们与视图一起隐藏,并且它下面的其他视图会自动向上调整。
    • @Nitesh 您可以隐藏容器视图内的视图。并在将 wrapperview 的高度约束设置为零时,将底部视图向上移动。
    • 在storyboard/xib上设置你的视图的绘图属性“Clip Subviews”。这将切割视图框架之外的部分,您将获得想要的效果。
    • 我没有xib文件,如何获取代码中的outlet。
    【解决方案2】:

    您可以将特定约束从界面构建器连接到您的代码,例如

    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?
    }
    

    【讨论】:

    • 感谢您的快速回答。我知道这种方法,但我只是想知道它可以以编程方式完成吗?因为我有大量的视图和子视图,所以将它们一一连接起来会使整个事情看起来超级混乱且难以维护。
    • 如果您以编程方式添加约束,您肯定可以从 NSLayoutConstraint 类中的 identifier 属性中受益。设置它们并对其进行迭代以获得特定的已识别约束。
    • 哇..这可能是我要找的那个。当我回到我的mac时让我试试。非常感谢您的帮助!
    • 这对于 ios swift 也是一样的,对吧?只是确保
    • @mding5692 是的。
    猜你喜欢
    • 2014-01-22
    • 2017-07-28
    • 2015-07-15
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多