我觉得这是一个相当常见的显示/隐藏范例UIViews
, 最经常UILabels
,取决于业务逻辑。我的问题是,使用 AutoLayout 响应隐藏视图的最佳方法是什么,就好像它们的框架是 0x0 一样。以下是包含 1-3 个功能的动态列表的示例。
![Dynamic features list](https://i.stack.imgur.com/QGN4c.png)
现在我从按钮到最后一个标签有一个 10px 的顶部空间,当标签隐藏时,它显然不会向上滑动。截至目前,我创建了此约束的出口,并根据我显示的标签数量修改常量。这显然有点hacky,因为我使用负常数值将按钮向上推到隐藏帧上。它也很糟糕,因为它不受实际布局元素的限制,只是基于其他元素的已知高度/填充进行偷偷摸摸的静态计算,并且显然与 AutoLayout 的构建目的相悖。
显然,我可以根据我的动态标签创建新的约束,但这需要大量的微观管理和大量的冗长的尝试来折叠一些空白。有更好的方法吗?更改帧大小 0,0 并让 AutoLayout 在不操作约束的情况下完成其工作?完全删除视图?
但老实说,仅仅从隐藏视图的上下文中修改常量就需要一行代码和简单的计算。重新创建新的约束constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
看起来好沉重。
2018 年 2 月编辑:参见 Ben 的回答UIStackView
s
我个人对显示/隐藏视图的偏好是创建具有适当宽度或高度约束的 IBOutlet。
然后我更新constant
价值0
隐藏,或者任何应该显示的值。
该技术的一大优点是可以保持相对约束。例如,假设您有视图 A 和视图 B,其水平间隙为x。当视图A宽度constant
被设定为0.f
然后视图 B 将向左移动以填充该空间。
无需添加或删除约束,这是一个重量级操作。只需更新约束constant
会成功的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)