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

标签 ios swift uitableview uilabel uistackview

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

enter image description here

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

enter image description here

现在这里有两个问题:

1) 调整 UIStackView 的大小

2) 调整单元格大小

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

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

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

我想指出的事实是,我正在 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 可能是也可能不是您最好的选择...它的设计更多是为了在其自己的框架内安排 View ,而不是根据 View 调整自己的框架。

对于像您所拥有的那样简单的布局,仅使用普通约束来布置元素可能会好得多。

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

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

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

让我知道它是否有意义 - 毫无疑问,您会想要进行一些调整。

关于ios - 更改 UILabel 行数后调整 UIStackView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42984856/

相关文章:

ios - 在 Firebase 中检索特定值

ios - 用于识别用户的 UDID 号码

ios - 嵌套在 Objective-C 中的每个循环

swift - CoreData 实体和属性

ios - 在自定义单元格按钮操作中获取节号

ios - LazyVGrid 中的 NavigationLink 循环后面的所有条目,SwiftUI

swift - 1 个大的 sktilemapnode 或更小的 sktilemapnode

ios - 在数组上使用 NSUserDefaults

Swift - TabBarController - 在运行时决定 segue

iphone - 添加 iOS UITableView HeaderView(不是部分标题)