【发布时间】:2018-08-31 00:01:26
【问题描述】:
我正在努力解决一些基本的 UIStackView 分布和对齐问题。
我有一个 UICollectionViewCell,它在 contentView 子视图上有一个水平 UIStackView。这个 UIStackView 对于三个标签本身有一个垂直的 UIStackView,当然还有 UIImageView。
这是下面截图的代码sn-p:
func createSubViews() {
// contains the UIStackview with the 3 labels and the UIImageView
containerStackView = UIStackView()
containerStackView.axis = .horizontal
containerStackView.distribution = .fill
containerStackView.alignment = .top
contentView.addSubview(containerStackView)
// the UIStackView for the labels
verticalStackView = UIStackView()
verticalStackView.axis = .vertical
verticalStackView.distribution = .fill
verticalStackView.spacing = 10.0
containerStackView.addArrangedSubview(verticalStackView)
categoryLabel = UILabel()
categoryLabel.font = UIFont.preferredFont(forTextStyle: .caption1)
categoryLabel.textColor = UIColor.lightGray
verticalStackView.addArrangedSubview(categoryLabel)
titleLabel = UILabel()
titleLabel.numberOfLines = 3
titleLabel.lineBreakMode = .byWordWrapping
verticalStackView.addArrangedSubview(titleLabel)
timeLabel = UILabel()
timeLabel.font = UIFont.preferredFont(forTextStyle: .caption1)
timeLabel.textColor = UIColor.lightGray
verticalStackView.addArrangedSubview(timeLabel)
// UIImageView
imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.layer.cornerRadius = 5
layer.masksToBounds = true
containerStackView.addArrangedSubview(imageView)
}
我想要实现的是,“时间标签”(“3 天前”)始终放置在每个 UICollectionViewCell 的底部(与 UIImageView 的底部对齐),无论标题标签行如何。
我玩过各种 UIStackView 分布,限制“时间标签”和“标题标签”的拥抱优先级。
但无论如何我都做不好。有什么提示吗?
【问题讨论】:
-
这听起来不像是 UIStackView 的好用例。我建议完全消除堆栈视图。到那时,配置你想要的布局就变得很简单了。
-
另外,很难知道你在做什么关于堆栈视图本身的约束。我没有看到任何迹象表明您正在使垂直堆栈视图成为单元格的高度。那么为什么底部标签会在单元格的底部呢?
标签: ios ios11 uistackview