自我调整大小UITableViewCell变小

时间:2018-03-28 13:58:01

标签: ios swift uitableview

我试图以编程方式创建一个表格视图单元格原型(类似于下面的一个)。

enter image description here

设计具有两个堆叠视图的单元格,
a)垂直堆栈视图以包含文本标签和,
b)水平堆栈视图以包含图像视图&垂直堆栈视图

我创建了所需的视图,将其填充到堆栈视图中,并将表格单元格的内容视图固定到tableviewcell的init()中。

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

在我的视图控制器中,我将tableView rowHeight设置为automaticDimension,并将估计的高度设置为大约一些。值。当我运行代码时,我得到的只是,

enter image description here

图像顶部的窄水平线是我的tableview单元格(在这种情况下,我的数据计数为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
}

1 个答案:

答案 0 :(得分:1)

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

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