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

时间:2017-03-23 19:04:59

标签: ios swift uitableview uilabel uistackview

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

enter image description here

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

enter image description here

现在有两个问题:

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)
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

当细胞大小调整时,我不得不做一点小动作让主要标签留在原位......可能找到更好的方法。 (重新编辑 - 是的,找到了更好的方法)

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