Ios 如何将UILabel的顶部与另一个UILabel的顶部对齐?

Ios 如何将UILabel的顶部与另一个UILabel的顶部对齐?,ios,swift,autolayout,uistackview,Ios,Swift,Autolayout,Uistackview,我希望实现以下UI: 此UI包含标签(顶部为粗体)、堆栈视图(蓝色矩形内)、视图(灰线)和该行下方的两个标签 如你所见,我在stackview中有单独的视图。以下是如何设置其约束: titleLabel.snp.makeConstraints { make in make.leading.equalToSuperview().offset(16) make.top.equalToSuperview() make.bottom.equalToSup

我希望实现以下UI:

此UI包含标签(顶部为粗体)、堆栈视图(蓝色矩形内)、视图(灰线)和该行下方的两个标签

如你所见,我在stackview中有单独的视图。以下是如何设置其约束:

titleLabel.snp.makeConstraints { make in
        make.leading.equalToSuperview().offset(16)
        make.top.equalToSuperview()
        make.bottom.equalToSuperview()
    }

    priceLabel.snp.makeConstraints { make in
        make.trailing.equalToSuperview().offset(-16)
        make.top.equalTo(titleLabel.snp.top)
        make.leading.equalTo(titleLabel.snp.trailing).offset(16)
    }
我的目标是将标题标签的顶部对齐到价格标签的顶部。看起来一切正常,但以下是此UI的屏幕截图,其中包含不同的文本:

如您所见,我的stackview没有为粗体标签留出空间。我不希望它发生。此UI显示在具有内部布局的底部工作表中。我认为问题在于我的价格标签没有底部约束。让我们试着给出:

priceLabel.snp.makeConstraints { make in
        make.trailing.equalToSuperview().offset(-16)
        make.top.equalTo(titleLabel.snp.top)
        make.leading.equalTo(titleLabel.snp.trailing).offset(16)
        make.bottom.equalToSuperview()
    }
标题标签的约束未更改。结果如下:

看起来一切正常,但我的第一个
标题标签太小,甚至
numberOfLines
设置为0。另一个问题是我的
价格标签的顶部与
标题标签的顶部不对齐。我不希望它发生

之后,我记得
UIKit
中的
UIStackView
具有
firstBaseline
对齐。然后,我决定将
标题标签
价格标签
放在水平堆叠视图中,并与
第一基线
对齐和
填充
分布:

private lazy var stackView: UIStackView = {
    let stackView = UIStackView()
    stackView.distribution = .fill
    stackView.alignment = .firstBaseline
    stackView.axis = .horizontal
    stackView.spacing = 16
    return stackView
}()


 private func setup() {
    stackView.addArrangedSubview(titleLabel)
    stackView.addArrangedSubview(priceLabel)
    addSubview(stackView)
    stackView.snp.makeConstraints { make in
        make.leading.equalToSuperview().offset(16)
        make.trailing.equalToSuperview().offset(-16)
        make.bottom.top.equalToSuperview()
    }
}
结果如下:

它完全毁了。我的粗体标签和stackview之间的空间太大。这可能是因为bold label的优先考虑

最后一句话


如您所见,问题在于stackview中标签的对齐。有几十种方法可以对齐UILabel的顶部,但它们都会给出不同的结果。我不知道为什么。似乎我对自动布局一无所知。那么,如何实现第一个屏幕截图的结果呢?

您需要做的是为粗体标签设置高度约束。这样它就不会收缩

label.heightAnchor.constraint(equalToConstant: 30).isActive = true

不太清楚你在做什么。。。这是子视图吗?或者是您正在演示的视图控制器?使用浮动面板库演示的视图控制器在不知道您真正在做什么的情况下,很难提供帮助。我从GitHub获取了SCENEE/FloatingPanel回购协议(我想这就是您所指的)。。。如果你能举一个简单的例子来说明你在尝试什么(请参阅),那么帮助就会容易得多。