根据单元格高度在 UITableViewCell 中动态设置 UIImageView 高度
Set UIImageView height dynamically inside UITableViewCell according to cell height
我对具有 UIImageView 和 UILabel 的 UITableViewCell 有疑问。所有的约束都是以编程方式设置的,这样就可以调整约束,使单元格的高度随着 UILabel 的高度加上一定的 padding 而动态变化,而 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的高度动态适应cell的高度?
不要从 contentView
给你的 coverView
约束,而是给它从 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)
])
但是... 没有为自动布局提供足够的信息,说明你想用单元格的高度做什么.
你说你想要标签高度(加上padding)来确定单元格的高度,所以添加这一行:
indexUnitLabel.setContentHuggingPriority(.required, for: .vertical)
告诉自动布局不扩展标签的高度超出其内容。
我对具有 UIImageView 和 UILabel 的 UITableViewCell 有疑问。所有的约束都是以编程方式设置的,这样就可以调整约束,使单元格的高度随着 UILabel 的高度加上一定的 padding 而动态变化,而 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的高度动态适应cell的高度?
不要从 contentView
给你的 coverView
约束,而是给它从 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)
])
但是... 没有为自动布局提供足够的信息,说明你想用单元格的高度做什么.
你说你想要标签高度(加上padding)来确定单元格的高度,所以添加这一行:
indexUnitLabel.setContentHuggingPriority(.required, for: .vertical)
告诉自动布局不扩展标签的高度超出其内容。