我对具有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的高度动态地适应单元格的高度?
而不是从coverView
给您的contentView
约束,而是从coverView
到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)
我假设您重新输入代码(而不是粘贴实际的代码),因为您的CoverView。bottomAnchor等于contentView。leadingAnchor,并且将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 ...不能提供自动布局的足够信息,以显示您想要对像元高度进行的操作。
您说您希望label height(加上填充)确定单元格的高度,所以添加以下行:
indexUnitLabel.setContentHuggingPriority(.required, for: .vertical)
告诉自动布局not将标签的高度扩展到其内容之外。