6

iOS7 をターゲットとする「Single View Application」用の空の iOS プロジェクトを作成しましたが、空のプロジェクトを実行し、次のように入力してビューツリーを調べました。

po [[UIWindow keyWindow] _autolayoutTrace]

2 つのレイアウト ガイドが既にあいまいであるという結果が得られました

*<UIWindow:0x108f537f0> - AMBIGUOUS LAYOUT
|   *<UIView:0x109409850>
|   |   *<_UILayoutGuide:0x109409c10> - AMBIGUOUS LAYOUT
|   |   *<_UILayoutGuide:0x10940a540> - AMBIGUOUS LAYOUT

これらの警告を取り除く理由はありますか?または単に無視できますか?

4

2 に答える 2

5

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 巻から学びました。電話を遅らせるという考えは私自身のものです。

于 2013-10-02T04:03:10.733 に答える