使用不同元素组合的自动布局

时间:2014-06-08 07:21:58

标签: ios uitableview uikit autolayout nslayoutconstraint

我有一个带有几个不同图标的UITableViewCell,可以以不同的组合显示。这是一个例子:

enter image description here

在这种情况下,有4种不同的组合:

  1. 所有3个元素都显示在屏幕上(如图所示) - >在这种情况下,所有元素彼此间隔相等
  2. 3个元素中的两个显示 - >在这种情况下,两个元素应该更优雅地占据空间,因此contentView到firstIcon,firstIcon到secondIcon,而secondView和bottomView的底部都应该是等间距的
  3. 显示3个元素中的一个 - >在这种情况下,一个元素应该以屏幕为中心
  4. 没有任何元素显示
  5. 我试图弄清楚如何在这种情况下布局约束,理想情况下,无需在代码中执行此操作,在tableview滚动时在运行时删除和添加所有这些约束,这可能会使滚动生涩。

    有没有办法让我在设计时工作?也许通过一些约束来尽可能地使每个图像垂直居中,并且只有在有其他元素的情况下才能抵抗它。缺少的元素可以被隐藏'或者从contentView中删除(以最好的方式)。

1 个答案:

答案 0 :(得分:2)

我认为您的设计时解决方案无效。您可以指定没有约束 - 隐藏视图参与布局,如果您要删除视图,那么您将删除约束。

不要认为约束更新会给您带来性能问题 - 首先以最简单的方式进行,然后进行测量。

在这种情况下,最简单的方法可能是使用容器视图来保存您的三个图标。这可以固定在单元格的顶部和底部,并与右边缘保持正确的距离。这些限制不会发生变化。

可以将所有三个图像视图添加到此容器中。水平地,它们不需要约束 - 它们可以在x轴上默认为零并且具有固有宽度。

根据单元格内容,您可以将每个图像视图设置为可见或不显示,删除容器视图上的约束,然后添加新的图像以提供垂直位置。最简单的一组约束是在容器视图的底部使用乘数。您将每个可见图像视图的中心Y约束到适当的乘数 - 如果只有一个可见,乘数0.5,如果有两个,0.33和0.66,并且对于所有三个,0.25,0.5和0.75。

这不是一系列复杂的约束,如果它引起滚动问题,我会感到惊讶。