我的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)
正如您在第二个屏幕截图中看到的那样,单元格没有调整大小,我不确定这是否是由于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)
}
答案 0 :(得分:0)
UIStackView
可能是也可能不是你最好的选择......它的设计更多是为了在自己的框架内安排视图,而不是根据视图调整自己的框架。
对于一个简单的布局,只需布置具有正常约束的元素可能会好得多。
看一下这个例子:https://github.com/DonMag/DynamicCellHeight
表B是一种完成布局的方式(表A是我用过的另一种布局)。
当细胞大小调整时,我不得不做一点小动作让主要标签留在原位......可能找到更好的方法。 (重新编辑 - 是的,找到了更好的方法)
让我知道它是否有意义 - 毫无疑问,你会想做一些调整。