根据单元格高度在UITableViewCell内部动态设置UIImageView高度

时间:2020-01-28 14:28:46

标签: swift uitableview uiimageview constraints cell

我对具有UIImageView和UILabel的UITableViewCell有问题。所有约束都以编程方式设置,因此可以调整约束,以使单元格的高度随UILabel的高度加上特定的填充而动态变化,而UIImageView必须适应UITableViewCell的高度。但是,当我放置图像时,单元格的高度会增加,直到达到图像的高度为止。

    contentView.addSubview(coverView)
    contentView.addSubview(indexUnitLabel)

    NSLayoutConstraint.activate([
        coverView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.topAnchor.constraint(equalTo: contentView.topAnchor),
        coverView.bottomAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.widthAnchor.constraint(equalToConstant: 68),

        titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
        titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
        titleLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
        titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)
    ])

是否可以设置约束以使UIImageView的高度动态地适应单元格的高度?

2 个答案:

答案 0 :(得分:1)

我假设您重新输入代码(而不是粘贴实际代码),因为您具有CoverView。 bottomAnchor 也等于contentView。 leaderAnchor 添加indexUnitLabel作为子视图,然后尝试约束titleLabel ...

因此,您的约束应如下所示:

    NSLayoutConstraint.activate([
        coverView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.topAnchor.constraint(equalTo: contentView.topAnchor),
        coverView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
        coverView.widthAnchor.constraint(equalToConstant: 68),

        indexUnitLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
        indexUnitLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
        indexUnitLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
        indexUnitLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)
    ])

BUT ... 并不能为自动布局提供足够的信息,这些信息涉及您想要对像元高度进行的操作。

您说要使用标签高度(加上填充)确定单元格的高度,因此添加以下行:

indexUnitLabel.setContentHuggingPriority(.required, for: .vertical)

这告诉自动布局 将标签的高度扩展到其内容之外。

答案 1 :(得分:0)

不要从coverViewcontentViewcoverView来约束titleLabel。相应地调整填充。还要将translatesAutoresizingMaskIntoConstraints设置为false。

  titleLabel.translatesAutoresizingMaskIntoConstraints = false
  coverView.translatesAutoresizingMaskIntoConstraints = false

  titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
  titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
  titleLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
  titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)

  coverView.topAnchor.constraint(equalTo: titleLabel.topAnchor, constant: padding),
  coverView.bottomAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: -padding),
  coverView.leadingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: padding),
  coverView.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: -padding)
相关问题