【发布时间】:2021-01-21 04:37:40
【问题描述】:
我想创建如下所示的自定义视图。
如您所见,它由标题和价格标签组成。标题可以有百万行,但其顶部边缘应与价格标签对齐。看似简单的设计,却有数百种解决方案。我尝试了它们中的每一个,但我的标题标签没有增长,因为最后有点(numberOfLines = 0 没有帮助)。以下是我创建这样一个设计的方法:
-
我创建了带有顶部、前导、尾随到价格标签、底部约束的 titleLabel。此外,我创建了带有顶部和尾部约束的价格标签,只是为了对齐它们的顶部边缘。我给价格标签分配了抗压和拥抱的优先级,因为它更重要,不应该被破坏。如果需要,这里是代码:
addSubview(titleLabel) addSubview(priceLabel) titleLabel.snp.makeConstraints { make in make.leading.equalToSuperview().offset(16) make.trailing.lessThanOrEqualTo(priceLabel.snp.leading).offset(-8) make.top.equalToSuperview() make.bottom.equalToSuperview() } priceLabel.snp.makeConstraints { make in make.trailing.equalToSuperview().offset(-16) make.top.equalTo(titleLabel.snp.top) }
我创建了单独的自定义视图,因为我想在 StackView 中使用它(间距 8,分布填充,垂直)。这种方法的结果:标题标签没有增长。如果它有大文本,它的末尾只有一行带点。
- 第二种方法是创建stackView(水平,间距8,分布填充,对齐顶部)。我设置对齐顶部以对齐标签的顶部边缘。结果与方法 #1 相同。
如何解决这个问题?我哪里错了?看来我在这里没有看到自动布局理论的核心内容。
【问题讨论】:
-
snp是什么? -
Snapkit。其实这里没关系。它用于设置约束。
-
如果我必须这样做,我会拿两个标签,先把正确的一个放在后面,然后放在上面。然后将左边添加并给它前导,尾随到 label1 的前导和从上到上leading1 ,就是这样它可以将 numberOfLines 设置为 .zero 并且它会这样做。
-
底部约束呢?
-
取决于整个屏幕,看这张图我觉得它不需要底部约束,我认为底部会有其他东西,如果需要底部你可以添加它。
标签: ios swift autolayout snapkit