これに関する正確なドキュメントやその他の参考文献を見つけるのは難しいようです。Advanced Auto Layout Toolboxの Florian Kugler のページを見ると、すばらしい情報がいくつかありました。これは興味深い質問だと思ったので、掘り下げてみました。
UIButton
myButton
Xibのセットアップといくつかのスペース制約アウトレットを使用して、テスト プロジェクトをセットアップしました。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *hSpaceConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *vSpaceConstraint;
あなたが述べたように、これらの制約を削除しviewDidLoad
ても効果はありませんでした。[self.myButton hasAmbiguousLayout]
の制約を削除した直後に出力しても、 viewDidLoad
false が表示されます。
しかし、 によってviewDidAppear
、状況は変わりました。両方によって、またlldbで自動レイアウトトレースを実行することによってmyButton
、あいまいであると正しくフラグ付けされます。hasAmbiguousLayout
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
*<UIWindow:0x8a94fe0> - AMBIGUOUS LAYOUT
| *<UIView:0x8c55340>
| | *<UIRoundedRectButton:0x8c54100> - AMBIGUOUS LAYOUT
| | | <UIImageView:0x8c54580>
| | | <UIButtonLabel:0x8c595a0>
(lldb)
この段階で、あいまいさを行使することもできます。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.myButton exerciseAmbiguityInLayout];
}
運動しない場合: 運動
する場合
:

コンソールにも何もありません。問題の最初の兆候で大量の制約例外を散発する自動レイアウトに慣れているので、これは私を驚かせました。
それを調査して、ここでSOをすばやく検索すると、
「あいまいさは一時的に許容できます(すぐに例外を発生させる不満足とは異なります)」
少なくとも今のところ、これで明確なコンソールが説明されました。
結論viewDidLoad
として、実行するまでに、測定、レイアウト、および表示のパスは既に発生していると思います。制約を削除すると、ビューがあいまいになります。次に、Auto Layout は、レイアウトの仕方がわからなくなったビューで常識的なことを行います。何もありません。景色はそのままです。