我觉得根据业务逻辑UIViews
,最常见的是显示/隐藏是一种相当常见的范例。UILabels
我的问题是,使用 AutoLayout 响应隐藏视图的最佳方式是什么,就好像它们的框架是 0x0 一样。以下是 1-3 个功能的动态列表示例。
现在我从按钮到最后一个标签有一个 10px 的顶部空间,当标签被隐藏时,它显然不会向上滑动。截至目前,我为这个约束创建了一个出口,并根据我显示的标签数量来修改常量。这显然有点棘手,因为我使用负常数值将按钮向上推到隐藏帧上。这也很糟糕,因为它不受实际布局元素的限制,只是基于其他元素的已知高度/填充的偷偷摸摸的静态计算,并且显然与 AutoLayout 的构建目的作斗争。
我显然可以根据我的动态标签创建新的约束,但是对于试图折叠一些空白来说,这是很多微观管理和很多冗长的。有更好的方法吗?更改帧大小 0,0 并让 AutoLayout 在不操纵约束的情况下完成其工作?完全删除视图?
不过老实说,仅从隐藏视图的上下文中修改常量需要一行代码和简单的计算。重新创建新的约束 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
似乎很重。
2018 年 2 月编辑:查看 Ben 的UIStackView
回答