- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
14小时前关门了。
Improve this question
我有一个自定义的单元格视图。在这个单元格中,我想显示一些照片和多个文本。我使用了imageview和uistackview。
但我不想占用第一个文本的可用空间。所以我修正了它,在我的UIStackView中添加了空视图。它修正了,但我不确定它是正确的。我怎么才能做到这一点,而不添加空视图,或者它是正确的方法来实现这一点?这里是我的单元格代码的一部分:
private let nameLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = UIFont.preferredFont(forTextStyle: .headline)
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .blue
return label
}()
private let authorLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = UIFont.preferredFont(forTextStyle: .body)
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .yellow
return label
}()
private let columnStackView: UIStackView = {
let stackView = UIStackView()
stackView.axis = .vertical
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.backgroundColor = .red
stackView.contentHuggingPriority(for: .horizontal)
stackView.alignment = .leading
stackView.distribution = .fill
return stackView
}()
private let imageView: UIImageView = {
let imageView = UIImageView()
imageView.clipsToBounds = true
imageView.contentMode = .scaleAspectFill
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
contentView.backgroundColor = .secondaryLabel
columnStackView.addArrangedSubview(nameLabel)
columnStackView.addArrangedSubview(authorLabel)
columnStackView.addArrangedSubview(UIView())
contentView.addSubViews(imageView,columnStackView)
addConstraints()
setUpLayer()
}
required init?(coder: NSCoder) {
fatalError("Unsupported")
}
func addConstraints() {
NSLayoutConstraint.activate([
imageView.widthAnchor.constraint(equalToConstant: contentView.bounds.width / 3),
imageView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),
imageView.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10),
imageView.rightAnchor.constraint(equalTo: columnStackView.leftAnchor),
imageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10),
columnStackView.leftAnchor.constraint(equalTo: imageView.rightAnchor),
columnStackView.topAnchor.constraint(equalTo: imageView.topAnchor),
columnStackView.bottomAnchor.constraint(equalTo: imageView.bottomAnchor),
columnStackView.rightAnchor.constraint(equalTo: contentView.rightAnchor),
])
}
这是上面代码的结果。我只是想知道这是正确的方法来做到这一点。
1条答案
按热度按时间eiee3dmh1#
我的意思是,让一个空的视图占据剩下的空间并不是真的“错”。事实上,SwiftUI有一个
Spacer
,它做的正是这样的事情。但是,如果我可以选择在没有它的情况下实现同样的行为,我会选择它来更好地控制我正在做的事情。您可以通过将
columnStackView
的底部锚点配置为***小于或等于imageView
的底部锚点***,在没有空UIView
的情况下实现相同的行为