如何通过启用自动布局功能的代码插入 UIButton - iOS

Posted

技术标签:

【中文标题】如何通过启用自动布局功能的代码插入 UIButton - iOS【英文标题】:How to insert UIButton through code with AutoLayout feature enabled - iOS 【发布时间】:2013-07-10 04:41:33 【问题描述】:

我一直在尝试以编程方式插入 UIButton,因为我正在使用 Autolayout 我已经做了类似的事情......

[self.add_scroll_view addConstraints : [NSLayoutConstraint constraintsWithVisualFormat : @"V:[date_picker_btn]-[button(==date_picker_btn)]"
                                                                                    options:0
                                                                                    metrics:nil
                                                                                      views:NSDictionaryOfVariableBindings(date_picker_btn, button)]];

这里有两个问题...

i) 插入的按钮与 date_picker_btn 的宽度不同,尽管我提到了 button(==date_picker_btn)。

ii)我已正确插入,但是下面的视图应相应向下对齐以适应新按钮...如何做到这一点...

感谢

【问题讨论】:

作为一个快速推荐,看看 KeepLayout Library (github.com/iMartinKiss/KeepLayout),很容易解决这类问题。 【参考方案1】:

当使用可视化格式语言时,正在为其描述约束的视图的父视图由 | 表示。字符。

例子:

V:|-20-[mybutton1(>=70@500)]-[mybutton2(==mybutton1)]-30-[mybutton3]-|

Refer this link

【讨论】:

我会检查一下,关于插入新按钮以及如何处理以下视图的任何想法? 您可以基于超级视图进行处理,但是如果您在滚动视图中处理所有内容,那么滚动视图中子视图的约束就不会像其他视图中的约束那样工作。它们用于设置滚动视图的 contentSize。这样,你在滚动视图上扔一堆东西,为里面的东西设置约束,然后为你计算 contentSize。这是一个非常酷的功能,但它与您在这里尝试做的事情背道而驰。【参考方案2】:

对于第一个问题,我提到了 V: 所以这意味着 (==) 将分配高度而不是宽度。要设置宽度,它应该以 H: 开头。

下一个问题,要在两个现有按钮之间插入一个按钮需要处理已经存在的约束,上面我添加了新的约束,只是不处理旧的现有,所以我必须删除现有的约束,以免发生冲突。工作正常..快乐编码:)

【讨论】:

以上是关于如何通过启用自动布局功能的代码插入 UIButton - iOS的主要内容,如果未能解决你的问题,请参考以下文章

按钮和自动布局

在 iPhone 的屏幕大小上更改 UIButton 的大小

如何在启用自动布局的情况下根据 UILabel 的内容自动更改 UILabel 对象的高度和下方其他元素的位置

在 iOS 6 中启用自动布局,在 < iOS6 中禁用自动布局

在 iOS 6 中启用自动布局,同时保持向后兼容 iOS 5

在启用自动布局和大小类的情况下更改视图宽度