私はAutoLayoutで遊んでいて、非常に単純な解決策であると思われるものを壁にぶつけています。
- コントロールの垂直列があります:1つのラベルと3つのボタン。
- ラベルの高さを40ピクセル(ポイント)にし、スーパービューの幅(左右の標準間隔)に基づいて幅を自動サイズ設定したいと思います。
- そのラベルの下に3つのボタンを縦に並べてほしい。
- ラベルと同じように幅を自動サイズにしたいと思います。
- それらの間隔を標準(アクア?)間隔(8ポイントでしょ?)にしたいのですが。
- 3つのボタンを同じ高さにしたいと思います。
実行したいものを取得することはできますが、実行時にコンソールでエラーが発生し続けます。なぜそれらを取得するのか、および取得を回避する方法を理解したいと思います。AutoLayoutでWWDCビデオを見てきましたが、これまでに試したことは次のとおりです。
UILabel *label = [self Label];
MMGlossyButton *button1 = ...
MMGlossyButton *button2 = ...
MMGlossyButton *button3 = ...
[[self view] addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(label)]];
[[self view] addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button1]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(new)]];
[[self view] addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button2]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(existing)]];
[[self view] addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button3]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(provider)]];
[[self view] addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[label(40)]-[button1(>=25)]-[button2(==button1)]-[button3(==button1)]-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(label, button1, button2, button3)]];
したがって、これは動的なサイズの方法でビューを表示するために機能しますが、コンソールに次のエラーが表示されます。
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you
don't understand, refer to the documentation for the UIView
property translatesAutoresizingMaskIntoConstraints)
// A whole bunch of constraint stuff that doesn't appear to be important...
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7554c40 V:[MMGlossyButton:0x7554b40(99)]>
したがって、最後のビットは、ビューにある最初のボタンのサイズが静的に99ポイントであることを示しているように見えます。
ビューに表示されるサイズはどれですか。
これは完全に恣意的です。
割り当てたくないのですが、割り当てを解除する方法がわかりません。
私は(最終的には)欲しいものを手に入れていますが、それは非常に単純なことを達成するための本当に回りくどい方法のようです。AutoLayoutの基本的なことを見逃しているのでしょうか、それともその能力にはそのような複雑さが必要なのでしょうか。