Ios 在UITableViewCell中动态布局子视图

Ios 在UITableViewCell中动态布局子视图,ios,uitableview,user-interface,swift,Ios,Uitableview,User Interface,Swift,这是我遇到的最复杂的UI相关问题。几个星期以来,我一直在试图找到一个解决方案,但毫无效果。让他们解释一下 在我正在使用的这个应用程序中,我需要显示一个特定的列表。这实际上是一个时间表。下面是它的样子 红色圆圈所圈出的区域不变。为了解释改变意味着什么,我必须向你们展示这个 它是一组过滤器,用户可以显示/隐藏某些字段,第一张图像中圈出的字段是静态字段。它们不能开关 现在问题出现在那些可以切换的设备上。下面是关闭Show Actions标志时的情况 带有蓝色背景的新标签将替换您在第一张图像中看到

这是我遇到的最复杂的UI相关问题。几个星期以来,我一直在试图找到一个解决方案,但毫无效果。让他们解释一下

在我正在使用的这个应用程序中,我需要显示一个特定的列表。这实际上是一个时间表。下面是它的样子

红色圆圈所圈出的区域不变。为了解释改变意味着什么,我必须向你们展示这个

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

现在问题出现在那些可以切换的设备上。下面是关闭Show Actions标志时的情况

带有蓝色背景的新标签将替换您在第一张图像中看到的底部标签

这里还有一个选项,您可以禁用“显示时间”选项,而时间标签将消失(是的,它仅对某些人有效。这是预期的)

如果这个过滤器列表是一个选项列表,那么就很容易了。只需为每个选项创建一个自定义单元格,就可以了。但不幸的是,用户能够切换多个过滤器!例如,用户可以同时关闭“显示动作”和“显示时间”,它看起来像最后一张图像,但底部标签在第三张图像中有蓝色标签

最重要的是,细胞的高度是动态的。在iOS 8中,从IB创建自动调整大小的单元格非常容易,只要添加自动布局约束即可。 但在我看来,从IB创建这些细胞对我来说不是一个可行的选择。这仅仅是因为用户可以进行太多的过滤器组合。因此,单元的子视图需要进行调整

我的问题是如何创建这样的动态单元?我最好的猜测是通过代码,对吗?我以前没有用代码编写UI,所以我尝试创建一个测试项目来熟悉它。但我面临的问题是设置固定的帧大小会使动态特性过时。以及如何移动视图以填充已删除视图的空间(最后一张图像。时间标签已消失,因此名称和id标签将向左移动以填充该空间)

我知道这个问题有点太宽泛了。我也不是要一个直截了当的答案。我真的很感谢你给我一些建议,甚至是一个更好的建议,因为我在这个问题上真的处于最底层


谢谢。

你的问题太广泛,很难给你任何精确的帮助。首先,我建议观看WWDC 2012中关于自动布局的3个视频(第202、228和232节)


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

此外,您可以在运行时更改约束。e、 g.您可以在uitableviewcell子类中编写一个方法
layoutWithFilters:
,并动态更改您的约束。您好,感谢您的回复。你能解释一下这些限制吗?这就是我到目前为止所做的。我在名称标签和时间标签之间设置了一个
垂直间距
约束,将其常量设置为0,并将优先级保持为1000()。接下来,我从名称标签创建了一个到Superview的
前导空间
约束,并将其常量设置为0,优先级设置为900()。但结果我明白了。你知道我可能丢了什么吗?@Isuru,最后这张照片就是你在时间标签仍然存在的情况下得到的吗?您在时间标签上有哪些限制?我还看到了场景列表中的红色箭头——你应该点击它,看看它报告了什么错误。@Isuru,实际上,我认为900的优先级太高了。与其在时间标签上添加宽度约束,不如尝试将低优先级约束设置为700而不是900。@Isuru,你不能只是隐藏时间标签,你必须将其从superview中删除,新的约束才能接管。