更改UILabel行数后调整UIStackView的大小

我的iOS应用程序有一个带有一个UITableViewCell的tableview,其布局如下(1个stackview包含2个标签和1个按钮)

在此处输入图像描述

当用户点击按钮时,中心标签的行数从0变为2,如下所示:

在此处输入图像描述

现在有两个问题:

1)调整UIStackView的大小

2)调整细胞大小

我找到了问题1的非最佳解决方案,它包括在堆栈中添加一个空视图。 (invalidateIntrinsicContentSize不起作用)。

let emptyView = UIView() emptyView.frame = CGRect(x: 0, y: 0, width: 0, height: 0) stackView.addArrangedSubview(emptyView) 

正如您在第二个屏幕截图中看到的那样,单元格没有resize,我不确定这是否是由于stackview或单元本身造成的。

我想指出的事实是我在UITableViewCell子类中编写代码,因为按钮事件在其中处理。

对于记录,Tableview使用动态大小调整:

 // dynamic cell sizing func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension } func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { return CGFloat(cellEstimatedHeight) } 

UIStackView可能是也可能不是你最好的选择……它的设计更多是为了在自己的框架内安排视图,而不是根据视图调整自己的框架。

对于一个简单的布局,只需布置具有正常约束的元素可能会好得多。

看一下这个例子: https : //github.com/DonMag/DynamicCellHeight

表B是完成布局的一种方法(表A是我玩过的另一种布局)。

当细胞大小调整时,我不得不做一些小技巧让主标签留在原位……可能会找到更好的方法。 (重新编辑 – 是的,找到了更好的方法)

让我知道它是否有意义 – 毫无疑问你会想做一些调整。