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