swift UIKit UISTackView防止填充元素空白空间[已关闭]

ffscu2ro  于 2023-01-12  发布在  Swift
关注(0)|答案(1)|浏览(156)

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),
        
    ])
}

这是上面代码的结果。我只是想知道这是正确的方法来做到这一点。

eiee3dmh

eiee3dmh1#

我的意思是,让一个空的视图占据剩下的空间并不是真的“错”。事实上,SwiftUI有一个Spacer,它做的正是这样的事情。但是,如果我可以选择在没有它的情况下实现同样的行为,我会选择它来更好地控制我正在做的事情。
您可以通过将columnStackView的底部锚点配置为***小于或等于imageView的底部锚点***,在没有空UIView的情况下实现相同的行为

相关问题