ios - 带有隐藏 UIView 的自动布局?

我觉得显示/隐藏 UIViews 是一种相当常见的范例,最常见的是 UILabels,具体取决于业务逻辑。我的问题是,使用 AutoLayout 响应隐藏 View 的最佳方式是什么,就好像它们的框架是 0x0 一样。以下是 1-3 个功能的动态列表示例。

现在我从按钮到最后一个标签有一个 10px 的顶部空间,当标签隐藏时显然不会向上滑动。截至目前,我为这个约束创建了一个导出,并根据我显示的标签数量来修改常量。这显然有点棘手,因为我使用负常数值将按钮向上推到隐藏帧上。这也很糟糕,因为它不受实际布局元素的限制,只是基于其他元素的已知高度/填充的偷偷摸摸的静态计算,并且显然与 AutoLayout 的构建目的作斗争。

显然,我可以根据我的动态标签创建新的约束,但是对于试图折叠一些空白来说,这是大量的微观管理和大量的冗长。有更好的方法吗?更改帧大小 0,0 并让 AutoLayout 在不操纵约束的情况下完成其工作?完全删除 View ?

老实说,仅仅从隐藏 View 的上下文中修改常量就需要一行代码和简单的计算。用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 重新创建新约束似乎很繁重。

2018 年 2 月编辑:使用 UIStackViews

查看 Ben 的回答

最佳答案

我个人对显示/隐藏 View 的偏好是创建一个具有适当宽度或高度约束的 IBOutlet。

然后我将 constant 值更新为 0 以隐藏,或者显示任何应该显示的值。

这种技术的最大优点是可以保持相对约束。例如,假设您有 View A 和 View B,它们的水平间隙为 x。当 View A 的宽度 constant 设置为 0.f 时, View B 将向左移动以填充该空间。

无需添加或删除约束,这是一项重量级操作。只需更新约束的 constant 即可。

https://stackoverflow.com/questions/19561269/

相关文章:

ios - 在 iOS 6 中以编程方式打开 map 应用

ios - 更改 UIImageView 的图像时淡入淡出/溶解

ios - 如何在 UITableViewCell 之间添加间距

objective-c - 从 NSString 中删除除数字之外的所有数字

ios - Xcode 调试器不打印对象并显示 nil,当它们不是时

objective-c - cocoa objective-c类中变量前面的下划线如何工作?

objective-c - 仅在 iOS 7 上运行时,Storyboard 原型(prototyp

ios - 错误 : _handleNonLaunchSpecificActions in iOS9

ios - 何时使用 dequeueReusableCellWithIdentifier 与 deq

ios - 是否可以使用 UITableViewStylePlain 禁用 UITableView