0

UIView私はそれに2つのラベルを置く親を持っています。これらの各ラベルには、次のように 1 行しかありません。

ベースラインが正しく整列されていません

現在の問題は、ベースラインが間違っていることです。自動レイアウトを使用していますが、問題は、この場合、制約がどのように見えるべきかということです。特にラベルの垂直方向の配置。これらは私が現在持っている制約です:

H:|-[title]-2-[description]-(>=5)-| //with NSLayoutFormatOptions.AlignAllFirstBaseline
V:|[title]|
V:|[description]|

上記の制約により、

制約を同時に満たすことができません。

センタリングと最初のベースライン制約が互いに競合しているためです。ラベルは親の高さ全体を使用する必要がありますが、フォント サイズは異なります。

ラベルを上/下に固定しようとしましたが、すべてのケースでうまくいきません。

ラベルを縦方向に配置するにはどうすればよいですか?

4

3 に答える 3

2

何が起こるかを確認するには、ラベルの背景を黄色にします。あいまいな制約があります。

これを修正するには、最後の垂直拘束を削除します。あなたはそれを必要としません。

これは私のテストプレイグラウンドで機能します:

let titleLabel = UILabel()
titleLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
titleLabel.font = UIFont.boldSystemFontOfSize(30)
titleLabel.text = "title"

hostView.addSubview(titleLabel)

let descriptionLabel = UILabel()
descriptionLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
descriptionLabel.font = UIFont.boldSystemFontOfSize(20)
descriptionLabel.text = "description"

hostView.addSubview(descriptionLabel)

let views = ["title": titleLabel, "description": descriptionLabel]
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-[title]-2-[description]-(>=5)-|", options: NSLayoutFormatOptions.AlignAllFirstBaseline, metrics: nil, views: views))
NSLayoutConstraint(item: titleLabel, attribute: .CenterY, relatedBy: .Equal, toItem: hostView, attribute: .CenterY, multiplier: 1.0, constant: 0.0).active = true

結果:スクリーンショット

于 2015-05-26T10:12:00.393 に答える