UITableViewCell在Swift中如何动态调整高度且隐藏的元素也占用空间?

8
这是情景:我有一个表格,其中包含动态高度的单元格。在每个单元格中,我都有一个标签和一个开关。当我运行应用程序时,只能看到这两个元素,但然后我将开关设置为true,那么(隐藏的?)文本视图会出现在这两个元素下面,使单元格的高度变大。

我该如何做到这一点?因为当我尝试隐藏元素时,它们也占据了空间。

这就是我想要的: enter image description here

现实情况: enter image description here

我该怎么办? 我尝试使用新的Stack View可以很好地处理它,但不能在表格单元格中使用....

我该如何解决这个问题?

3个回答

1
我将这个问题解决了,混合使用了这个答案:Swift中UITableView单元格的动态高度问题 来实现动态高度。对于需要显示或隐藏的视图,我添加了一个高度约束,然后在cellForRowAtIndexPath中,如果需要隐藏它,就将约束的常数设置为0,如果要显示它,则设置为你想要的高度。

希望这能有所帮助!


0
我认为可以使用约束来解决这个问题:
- 为您的文本视图设置高度约束,
- 在您的视图控制器中创建该约束的出口,
- 当使用开关时,在您的视图控制器中更改约束的常量属性。


不可以。您可以在开关的IBAction方法中更改约束。 - Macple
1
你必须以某种方式重新计算单元格的高度,它不会自动调整大小。 - nethuszar
你根本不需要计算。 - Developer Sheldon

0

如果您隐藏了文本视图,那么您的文本视图仍然存在,文本长度也不会受到影响。

因此,与其隐藏/显示文本视图的文本,最好将您的文本视图从“”更新为“任何您想要显示的内容”。

在这种情况下,自动布局可以轻松处理您的查询。您只需要进行设置即可。

self.tableView.estimatedRowHeight = 65 //whatever number
self.tableView.rowHeight = UITableViewAutomaticDimension

在xib/storyboard中,为您的文本视图添加顶部底部的约束条件,同时不要忘记将您的文本视图设置为不可滚动。

实际上,我建议您直接使用UILabel代替UITextField,您只需要将LabellineNumber设置为0,就可以忽略文本视图的滚动和大小设置


我需要TextView,因为用户可以写评论。所以我需要显示一个空的TextView。 - nethuszar
没错。你可以展示一个空的文本视图,只需要让文本视图不可滚动,并且设置合适的大小即可。 - Developer Sheldon
但我认为你忽略了一点,那就是我每次都必须重新计算行的高度。 - nethuszar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接