更改 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 是我尝试过的另一种布局)。
我不得不耍点小花招,让主标签在调整单元格大小时保持原位……可能会找到更好的方法。 (重新编辑 - 是的,找到了更好的方法)
让我知道它是否有意义 - 毫无疑问你会想要做一些调整。
我的 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 是我尝试过的另一种布局)。
我不得不耍点小花招,让主标签在调整单元格大小时保持原位……可能会找到更好的方法。 (重新编辑 - 是的,找到了更好的方法)
让我知道它是否有意义 - 毫无疑问你会想要做一些调整。