9

次のようにプログラムでビュー階層を作成しています。

UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIViewController1* viewController1 = [[UIViewController1 alloc] init];
UIViewController2* viewController2 = [[UIViewController2 alloc] init];

UINavigationController* navigationController = [[UINavigationController alloc] init];
[navigationController setViewControllers:@[viewController1, viewController2] animated:NO];

[window setRootViewController:navigationController];
[window makeKeyAndVisible];

2 つの VC は、どちらの場合も自動レイアウトを使用する XIB からロードされます。すべて問題ないように見えますが、実際に実行すると、コンソールにpo [[UIWindow keyWindow] _autolayoutTrace]心配な警告が表示されます。AMBIGUOUS LAYOUT

*<UIWindow:0xc63bec0>
|   *<UILayoutContainerView:0xd3d79b0> - AMBIGUOUS LAYOUT
|   |   *<UINavigationTransitionView:0xd3d8b60> - AMBIGUOUS LAYOUT
|   |   |   *<UIViewControllerWrapperView:0xd566c00> - AMBIGUOUS LAYOUT
|   |   |   |   *<UIView:0xc66b290> - AMBIGUOUS LAYOUT
|   |   |   |   |   *<UIView:0xc66b0e0> - AMBIGUOUS LAYOUT
|   |   |   |   |   |   *<MKMapView:0xd504800> - AMBIGUOUS LAYOUT

だから私の質問は、どうすればそれらを取り除くことができますか? または、より一般的には、自動レイアウトを使用してウィンドウとビューの階層をプログラムで設定するにはどうすればよいでしょうか?

ウィンドウをプログラムで設定するという問題について、ドキュメントは非常に曖昧です。この問題に関する 3 つの WWDC ビデオをすべて見たにもかかわらず、これを行う方法を把握できませんでした。

編集: 私が抱えている問題は、新しい iOS 7 にのみ関連しているようです。NDA の下にあるため、この議論は指定された Apple Developer Forums に移動します。

4

1 に答える 1

1

AMBIGUOUS LAYOUTAuto Layout がビューのレイアウト方法を知るのに十分な指定がされていないことを意味します。つまり、指定した内容は少しあいまいです。

これは、Auto Layout に異なることを行うように指示する 2 つ以上の制約がある壊れた制約とはまったく異なります。

あいまいなレイアウトでは、Auto Layout は何をしようとしているのかを理解しようとします。うまくいけば、それはあなたが望むものになるでしょうが、それは保証されていません. したがって、警告。

この回答は、開始方法を説明する場所ではありません。しかしありがたいことに、より多くの自動レイアウト リソースが表示されるようになりました。

iOS Auto Layout Demystifiedという本があります。購入したものの、まだ読む機会がありません。しかし、それはかなりよく見えます。

また、Ole Begemann の優れた記事Cocoa Autolayout について知っておくべき 10 の事柄もチェックしてください。

入門チュートリアルについては、Ray wenderlich のBeginning Auto Layout in iOS 6: Part 1/2 をご覧ください。

最後に、自動レイアウトで毎回気になることが 1 つあるとすれば、それは、プログラムで作成したビューに対して、自動レイアウトを使用したいというsetTranslatesAutoresizingMaskIntoConstraintsフラグを設定するのを忘れていることです。NOコンソールに奇抜な制約の例外が表示された場合は、そのことを頭の片隅に置いておいてください。

于 2013-07-11T15:10:56.727 に答える