ios - 具有不同元素组合的自动布局

标签 ios uitableview uikit autolayout nslayoutconstraint

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

enter image description here

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

  1. 所有 3 个元素都显示在屏幕上(如图所示)-> 在这种情况下,所有元素彼此等距
  2. 显示了 3 个元素中的两个 -> 在这种情况下,这两个元素应该更优雅地占据空间,因此 contentView 到 firstIcon,firstIcon 到 secondIcon,secondIcon 和 contentView 的底部都应该等距<
  3. 正在显示 3 个元素之一 -> 在这种情况下,一个元素应在屏幕上居中
  4. 没有显示任何元素

我正在尝试弄清楚在这种情况下如何布置约束,理想情况下不必在代码中执行此操作,在运行时删除和添加所有这些约束,而 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/

相关文章:

ios - 将事件附加到接口(interface)但不使用具体类时,Monotouch 应用程序崩溃

ios - 从数组中提取多个数据时如何使用 iOS 图表?

iphone - UITableView didSelectRowAtIndexPath : Not Working

swift - 如果 Firebase 快照为零,则 UITableView Cell 的默认值

ios - 垂直分段控制iOS

ios - 核心数据模型——实体和逆

ios - 如何加速 Xcode 中的 UI 测试用例?

swift - 向后滚动时单元格不会被取消选择

ios - 如何将图像 UIButton 缩放到插图?

ios - 在 View Controller 之间转换时自定义动画