web-dev-qa-db-ja.com

「最初のベースライン」と「ベースライン」の自動レイアウト制約について

次のようなビューを作成しました。

screenshot 1

使用不足している制約を追加自動的に制約を追加します。私はiOSの世界ではかなり新しいので、制約がどのように機能するかを構成しようとしています。

ドキュメントの概要で、追加された制約を確認できます。

screenshot 2

ラベル[〜#〜] ur [〜#〜]をクリックすると、サイズインスペクターに次のように表示されます。

screenshot 3

最初のベースラインでULに揃えられた制約とベースラインでULに揃えられた制約の違いは何ですか?制約ボタンのサイズインスペクタをクリックすると、同じ行が表示されます。

17
zero_coding

Apple Docs:

NSLayoutAttributeBaseline
オブジェクトのベースライン。
iOS 6.0以降で使用できます。
NSLayoutAttributeFirstBaseline
オブジェクトのベースライン。複数行のテキストを持つオブジェクトの場合、これは最上位のテキスト行のベースラインです。
iOS 8.0以降で使用できます。

3行のラベルに揃えたときの違いのスクリーンショットもここにあります。上の緑のラベルはNSLayoutAttributeFirstBaselineを使用しており、下の緑のラベルはNSLayoutAttributeBaselineを使用しています。これらは2つの緑のラベルに対する唯一の制約であり、それらは両方ともピンクのラベルから水平に40に固定されています。

DebuggingBaselineConstraints

33
naomimichiko

「不足している制約の追加」を使用することはお勧めしません。これは、DWIWが予測することのできない非常に予測できないウィザードです(必要なことを実行します)。各制約を学び、手動で追加します。 Ctrlキーを押しながらシーン階層内のオブジェクト間をドラッグします。制約インスペクタを使用して数値を編集します。三角形のポップアップから「フレームを更新」を使用します。インスペクターから制約を削除します。あなたがそれを取得するまで繰り返します。

firstBaseLineは、複数行オブジェクトの上部ベースラインを参照します: ストーリーボード警告:iOS 8.0より前の最初のベースラインレイアウト属性

関連するラベルまたはテキストフィールドが1行しかない場合、それは無意味な制約です。

フォントサイズ、アセンダー、およびベースラインディセンダーが異なる場合でも、テキストの2つの横一列の縦線を垂直に揃えたい場合は、baseLine揃えを使用します。文字列が同じ行にあるように自然に見えます。

下、上、中央の垂直方向の配置も可能で、テキスト以外のオブジェクトに適しています。

11
BaseZen