我有一个 UITableViewCell,它有几个不同的图标,可以以不同的组合显示。这是一个例子:
在这种情况下,有 4 种不同的组合:
- 所有 3 个元素都显示在屏幕上(如图所示)-> 在这种情况下,所有元素彼此等距
- 显示了 3 个元素中的两个 -> 在这种情况下,这两个元素应该更优雅地占据空间,因此 contentView 到 firstIcon,firstIcon 到 secondIcon,secondIcon 和 contentView 的底部都应该等距<
- 正在显示 3 个元素之一 -> 在这种情况下,一个元素应在屏幕上居中
- 没有显示任何元素
我正在尝试弄清楚在这种情况下如何布置约束,理想情况下不必在代码中执行此操作,在运行时删除和添加所有这些约束,而 tableview 正在滚动,这可能会使滚动不稳定.
有没有办法让我在设计时让它发挥作用?也许通过对每个图像尽可能垂直居中施加一些限制,并且只有在有其他元素时才阻止它。缺失的元素可以“隐藏”或完全从 contentView 中删除(以效果最好的为准)。
最佳答案
我认为您的设计时解决方案行不通。没有您可以指定的约束 - 隐藏 View 参与布局,如果您要删除 View ,那么您将删除约束。
不要假设约束更新会给您带来性能问题 - 首先以最简单的方式进行,然后再进行测量。
在这种情况下,最简单的方法可能是使用容器 View 来保存三个图标。这可以固定到单元格的顶部和底部,并与右边缘保持正确的距离。这些约束不会改变。
所有三个 ImageView 都可以添加到这个容器中。在水平方向上,它们不需要约束——它们可以在 x 轴上默认为零,并且具有固有宽度。
根据单元格内容,您可以将每个 ImageView 设置为可见或不可见,移除容器 View 上的约束,然后添加新的约束以提供垂直位置。最简单的一组约束是在容器 View 的底部使用乘数。您可以将每个可见 ImageView 的中心 Y 限制为适当的乘数 - 如果只有一个可见,则乘数为 0.5,如果有两个,则为 0.33 和 0.66,对于所有三个,则为 0.25、0.5 和 0.75。
这不是一组复杂的约束,如果它导致滚动问题,我会感到惊讶。
关于ios - 具有不同元素组合的自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24103912/