ios - 自动调整 UITableViewCell 变小

标签 ios swift uitableview

我正在尝试以编程方式创建一个 TableView 单元格原型(prototype)(类似于下面的原型(prototype))。

enter image description here

设计了具有两个堆栈 View 的单元格,
a) 包含文本标签的垂直堆栈 View
b) 包含 ImageView 和垂直堆栈 View 的水平堆栈 View

我创建所需的 View ,将其填充到堆栈 View 中,然后在 tableviewcell 的 init() 中将堆栈 View 固定到表单元格的 contentView。

我从 cellForItemAtIndexPath 调用 configureCell() 来填充单元格的数据。

我的 init() 看起来像这样

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)

    textStackView = UIStackView(arrangedSubviews: [priorityNameLabel, descriptionLabel])
    textStackView.axis = .vertical
    textStackView.alignment = .leading
    textStackView.distribution = .fill
    textStackView.spacing = 5

    containerStackView = UIStackView(arrangedSubviews: [priorityImageView, textStackView])
    containerStackView.axis = .horizontal
    containerStackView.alignment = .center
    containerStackView.spacing = 5
    containerStackView.distribution = .fill

    contentView.addSubview(containerStackView)
    containerStackView.translatesAutoresizingMaskIntoConstraints = false
    pinContainerToSuperview()
}

func pinContainerToSuperview() {
    containerStackView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor).activate()
    containerStackView.topAnchor.constraint(equalTo: contentView.topAnchor).activate()
    containerStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor).activate()
    containerStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).activate()
}

在我的 View Controller 中,我将 tableView rowHeight 设置为 automaticDimension 并将估计高度设置为大约。值(value)。当我运行代码时,我得到的是,

enter image description here

图像顶部的窄水平线是我的表格 View 单元格(在这种情况下我的数据计数是 3)。我无法弄清楚问题所在。有人可以指出这里出了什么问题吗?

编辑 1:

这些是我的 TableViewCell 类的实例成员

var containerStackView: UIStackView!
var textStackView: UIStackView!

var priorityImageView: UIImageView! {
    let imageView = UIImageView()
    imageView.contentMode = .scaleAspectFit
    return imageView
}

var priorityNameLabel: UILabel! {
    let label = UILabel()
    return label
}

var descriptionLabel: UILabel! {
    let label = UILabel()
    return label
}

最佳答案

您将标签和 ImageView 作为计算属性 - 这意味着每次您访问它们时,都会创建一个新实例。这不好。这基本上意味着当您将它们设置为堆栈 View 的排列 subview 然后尝试稍后配置它们时,您将处理不同的对象。

最简单的解决方案是按照在 init 中创建堆栈 View 的方式创建标签和 ImageView 。

关于ios - 自动调整 UITableViewCell 变小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49536536/

相关文章:

swift - 在第二个 View 上显示标签值 - Swift

iphone - 解决内存泄漏后 dequeueReusableCellWithIdentifier

ios - 如何在左侧的垂直轴上显示标签(使用图表)?

ios - 将变量值从文本字段传递到 iOS 中的变量

Swift 的小数精度问题

ios - 是否可以使用 CoreBluetooth 代替 iBeacons 在后台测量距离?

iOS 不会将触摸转发到下面的 View

ios - 如何将文件从目录复制到iphone文档目录

ios - Swift 中 UITableView 的动态数据源交换

swift - 我无法将 subview 添加到 UItableviewcell