动态地在UITableViewCell中布置子视图

时间:2014-09-14 00:20:17

标签: ios uitableview user-interface swift

这是我遇到的最复杂的UI相关问题。我一直试图找到解决方案几周,但无济于事。让我们解释一下。

在我正在处理的这个应用程序中,我需要显示某个列表。这实际上是一个时间表。这是它应该是什么样子,

enter image description here

由红色圆圈圈出的字段不会改变。要解释什么变化意味着我必须向您展示这一点。

enter image description here

一组过滤器,用户可以显示/隐藏某些字段,第一张图像中圈出的字段是静态字段。它们无法打开和关闭。

现在问题出现了可以切换的问题。如果您关闭显示操作标志,这就是它的样子。

enter image description here

带有蓝色背景的新标签取代了您在第一张图片中可以看到的底部标签。

这是另一个禁用显示时间选项并且时间标签消失的情况(是的,它仅影响某些人。预期的。)

enter image description here

如果此过滤器列表是一个选项列表,那将很容易。只需为每个选项创建一个自定义单元格,您就可以开始使用了。但遗憾的是,用户可以切换多个过滤器!例如,用户可以关闭显示操作显示时间,它看起来像最后一个图像,但底部标签在第三个图像中将具有蓝色标签。

最重要的是,细胞的高度是动态的。在iOS 8中,当您可以添加自动布局约束并完成时,从IB中创建自调整大小单元很容易。 但在我看来,从IB创建这些细胞对我来说不是一个可行的选择。仅仅因为用户可以制作过多的过滤器组合。因此,单元格的子视图需要适应它。

我的问题是如何创建这样的动态单元格?我最好的猜测是通过代码,对吧?我之前没有在代码中编写UI,所以我尝试创建一个测试项目来熟悉它。但是我面临的问题是设置固定的框架尺寸会使动态性质过时。如何移动视图以填充已移除视图的空间(最后一张图像。时间标签已消失,因此名称和ID标签向左移动以填充该空间)。

我知道这个问题有点过于宽泛。我也不是要求直接回答。我真的很感激一些指点,甚至更好的建议如何解决这个问题,因为我在这个问题上真的处于最底层。

谢谢。

1 个答案:

答案 0 :(得分:2)

由于您的问题非常广泛,因此很难给您任何确切的帮助。首先,我建议从WWDC 2012(会议202,228和232)观看Auto Layout上的3个视频。

回答您的一个示例,如何移动视图以替换已删除的视图。您需要使用文本(Kund Alof ...)从视图中制作两个左边缘约束。一个常量为0的时间标签,优先级为1000(默认值为),另一个为单元格的左边缘,也是常量为0,但优先级较低,比如900 。只要时间标签存在,对它的约束将决定文本标签的位置,但是当它被删除时,左边缘的较低优先级约束将接管并将标签移动到左边缘。