iOS6でも同じでした。
制約が「落ち着いて」曖昧にならないようになるまでに時間がかかる場合があると思います。WWDC 2012 のビデオ「Best Practices for Mastering Auto Layout」によると、あいまいさは一時的に許容できます (すぐに例外が発生する不満足とは異なります)。
制約があいまいなままになっていないことを自分自身に証明したい場合は、[[UIWindow keyWindow] _autolayoutTrace] のラッパーを作成し、少し遅れて呼び出します。
- (void)viewDidAppear:animated
{
[super viewDidAppear:animated];
[self performSelector:@selector(wrapperForLoggingConstraints) withObject:nil afterDelay:.3];
}
- (void)wrapperForLoggingConstraints
{
[[UIWindow keyWindow] _autolayoutTrace];
}
これを機能させるには、UIWindow にカテゴリを作成する必要があります。
@interface UIWindow()
+ (UIWindow *)keyWindow;
- (NSString *)_autolayoutTrace;
@end
このカテゴリを独自のヘッダー ファイル UIWindow_AutoLayoutDebug.h に配置しました。
アプリで [[UIWindow keyWindow] _autolayoutTrace] を呼び出すたびに、UIWindow_AutoLayoutDebug.h をインポートします。
コードで [[UIWindow keyWindow] _autolayoutTrace] を呼び出す方法については、raywenderlich.com チームによる本「チュートリアルによる iOS 6」、第 1 巻から学びました。電話を遅らせるという考えは私自身のものです。