我觉得显示/隐藏 UIViews
是一种相当常见的范例,最常见的是 UILabels
,具体取决于业务逻辑。我的问题是,使用 AutoLayout 响应隐藏 View 的最佳方式是什么,就好像它们的框架是 0x0 一样。以下是 1-3 个功能的动态列表示例。
现在我从按钮到最后一个标签有一个 10px 的顶部空间,当标签隐藏时显然不会向上滑动。截至目前,我为这个约束创建了一个导出,并根据我显示的标签数量来修改常量。这显然有点棘手,因为我使用负常数值将按钮向上推到隐藏帧上。这也很糟糕,因为它不受实际布局元素的限制,只是基于其他元素的已知高度/填充的偷偷摸摸的静态计算,并且显然与 AutoLayout 的构建目的作斗争。
显然,我可以根据我的动态标签创建新的约束,但是对于试图折叠一些空白来说,这是大量的微观管理和大量的冗长。有更好的方法吗?更改帧大小 0,0 并让 AutoLayout 在不操纵约束的情况下完成其工作?完全删除 View ?
老实说,仅仅从隐藏 View 的上下文中修改常量就需要一行代码和简单的计算。用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
重新创建新约束似乎很繁重。
2018 年 2 月编辑:使用 UIStackView
s
最佳答案
我个人对显示/隐藏 View 的偏好是创建一个具有适当宽度或高度约束的 IBOutlet。
然后我将 constant
值更新为 0
以隐藏,或者显示任何应该显示的值。
这种技术的最大优点是可以保持相对约束。例如,假设您有 View A 和 View B,它们的水平间隙为 x。当 View A 的宽度 constant
设置为 0.f
时, View B 将向左移动以填充该空间。
无需添加或删除约束,这是一项重量级操作。只需更新约束的 constant
即可。
https://stackoverflow.com/questions/19561269/
相关文章:
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