0

インターフェイスビルダーを使ってiPadの画面をデザインしようと思っています。空のビューがあり、4 つの制約を持つ壁紙として UIImageView を追加しました。

Leading Space to superview = 0
Trailing Space to superview = 0;
Top Space to superview = 0;
Bottom Space to superview = 0;

このようにして、画像は横向きモードで完全にサイズ変更されます。

viewDidAppear: と didRotateFromInterfaceOrientation: にデバッグ コードを挿入しました。

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);

画面にこの要素がある場合にのみ、縦長モードであいまいなレイアウト出力が得られます。

*<UIWindow:0x754c210>
|   *<UIView:0x75555f0> - AMBIGUOUS LAYOUT
|   |   *<UIImageView:0x7555650> - AMBIGUOUS LAYOUT

ランドスケープモードでは、問題なく動作するようです

*<UIWindow:0x754c210>
|   *<UIView:0x75555f0>
|   |   *<UIImageView:0x7555650>

その後、さらにコントロールを追加したところ、画面は正常に動作しているように見えますが、あいまいなレイアウトを取り除くことはできません。私が間違っていることは何ですか?

4

2 に答える 2

1

制約が「落ち着いて」曖昧にならないようになるまでに時間がかかる場合があると思います。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:06:16.173 に答える
0

あなたが何か間違ったことをしているかどうかはわかりませんが、私は Visual Formatting 言語を使用しています:

[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentsView]|"
                                            options:0
                                            metrics:nil
                                              views:NSDictionaryOfVariableBindings(contentsView)]];

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentsView]|"
                                            options:0
                                            metrics:nil
                                              views:NSDictionaryOfVariableBindings(contentsView)]];

トレースによるあいまいなレイアウト警告は表示されません。

于 2013-01-11T17:43:49.717 に答える