我觉得根据业务逻辑,显示/隐藏 UIViews
(通常是 UILabels
)是一种相当常见的范例。我的问题是,什么是最好的方式使用自动布局来响应隐藏的视图,如果他们的框架是0x0。下面是一个包含1-3个特性的动态列表示例。
现在我有一个10px 的顶部空间从按钮到最后一个标签,这显然不会滑动时,标签是隐藏的。从现在开始,我创建了一个这个约束的出口,并根据显示的标签数量修改常量。这显然是有点古怪,因为我使用负常量值推动按钮在隐藏的帧。它也不好,因为它没有被限制到实际的布局元素,只是基于已知的高度/其他元素的填充的鬼鬼祟祟的静态计算,并且显然与 AutoLayout 的构建目的相抵触。
显然,我可以根据我的动态标签创建新的约束,但是这需要很多微观管理和冗长的工作,因为我试图只是压缩一些空格。还有更好的方法吗?更改框架大小0,0和让自动布局做它的事情没有操作的约束?完全移除视图?
实际上,只需要从隐藏视图的上下文中修改常量,就需要一行代码和简单的计算。用 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
重新创建新的约束似乎很繁重。
编辑2018年2月 : 见本的 UIStackView
回答