5

iOS 設定ダイアログで行ったように、UITextField インスタンス テキストフィールドの横に UILabel インスタンス ラベルを配置しようとしています。Florian Kugler の FLKAutoLayout 拡張機能 ( https://github.com/dkduck/FLKAutoLayout ) の助けを借りて、自動レイアウトと制約を使用しています。

ここに画像の説明を入力

ラベルの先頭の制約と、ラベルとテキストフィールドの間のスペースの制約のみを設定すると、ラベルとテキストフィールドの幅がコンテンツに合わせて調整されます。(下の写真)

しかし、テキストフィールドの末尾の制約も設定すると、テキストフィールドの幅のみがコンテンツに合わせて調整されますが、ラベルは引き伸ばされます。(トップ写真)

テキストフィールドが引き伸ばされ、ラベルがその内容に合わせて調整されるように、反対の動作をしたいと思います。iOS がテキストフィールドではなくラベルを拡大することを決定したのはなぜですか?

[self addSubview:self.label];
[self addSubview:self.textField];

[self.label alignLeadingEdgeWithView:self predicate:@"10"];
[self.textField constrainLeadingSpaceToView:self.label predicate:@"10"];

// difference between top and bottom pciture
// [self.textField alignTrailingEdgeWithView:self predicate:@"-25"];
4

2 に答える 2

14

ここに画像の説明を入力

EDITED: Rahulのコメントの後、私は幅と優先順位で遊んだ. 次の幅の制約を追加すると、多少間違った方向につながります。非常に長い値を入力したため、ラベルのサイズが小さくなりすぎました。

[self.label constrainWidth:@"0@1"];

ここに画像の説明を入力

だから私は最終的に「圧縮抵抗とコンテンツハグ」(http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html)を読み、解決策は水平コンテンツハグ優先度を設定することですラベルをより高い値にします。

[self.label setContentHuggingPriority:500 forAxis:UILayoutConstraintAxisHorizontal];

次に、大きな値を入力しても、ラベルはそのコンテンツと同じ幅のままになります!

解決策は、幅の制約を優先して追加するのではなく、UIView の固有のコンテンツ サイズに対して Compression Resistance と Content Hugging プロパティを設定することです。

ここに画像の説明を入力

于 2013-09-17T11:30:30.217 に答える
0

ストーリーボードで設定した次の制約は、希望どおりに機能します。

  • ラベルとスーパービューの間の水平スペースの制約 (デフォルト)。
  • テキストフィールドとスーパービューの間の水平スペースの制約。(デフォルト)
  • テキストフィールドとラベルの間の水平スペースの制約。
于 2013-09-17T11:10:25.347 に答える