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

Resizing UIStackView after changing UILabel number of lines

我的 iOS 应用有一个带有一个 UITableViewCell 的表格视图,布局如下(1 个堆栈视图包含 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)

正如您在第二个屏幕截图中看到的那样,单元格没有调整大小,我不确定这是由于堆栈视图还是单元格本身造成的。

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

记录表视图正在使用动态调整大小:

// 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

Table B 是 完成布局的方式(Table A 是我尝试过的另一种布局)。

我不得不耍点小花招,让主标签在调整单元格大小时保持原位……可能会找到更好的方法。 (重新编辑 - 是的,找到了更好的方法)

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