0

フルフレームのサブビューを作成しています (サブビューのフレーム = スーパービューのバインド)

私は次のような展開をしました

[self addConstraints:[NSLayoutConstraint
                           constraintsWithVisualFormat:@"H:|-0-[subview]-0-|"
                           options:NSLayoutFormatDirectionLeadingToTrailing
                           metrics:nil
                           views:NSDictionaryOfVariableBindings(subview)]];
[self addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|-0-[subview]-0-|"
                      options:NSLayoutFormatDirectionLeadingToTrailing
                      metrics:nil
                      views:NSDictionaryOfVariableBindings(subview)]];

しかし、実行時エラーが発生し、次のエラーが表示されました。

"<NSAutoresizingMaskLayoutConstraint:0x1001bb700 h=--& v=--& H:[IUView:0x10015dcc0(960)]>",
"<NSLayoutConstraint:0x1001911d0 H:|-(0)-[IUBGView:0x1001783f0]   (Names: '|':IUView:0x10015dcc0 )>",
"<NSLayoutConstraint:0x1001910e0 H:[IUBGView:0x1001783f0]-(0)-|   (Names: '|':IUView:0x10015dcc0 )>",
"<NSLayoutConstraint:0x10017bbf0 H:|-(0)-[NSImageView:0x100160050]   (Names: '|':IUBGView:0x1001783f0 )>",
"<NSLayoutConstraint:0x10015d7f0 H:[NSImageView:0x100160050]-(0)-|   (Names: '|':IUBGView:0x1001783f0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1001a6a80 h=--& v=--& H:[NSImageView:0x100160050(0)]>"

制約を破って回復を試みます

NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints を YES に設定して、これが発生したときに -[NSWindow visualConstraints:] を自動的に呼び出します。または、objc_exception_throw でブレークして、デバッガーでこれをキャッチします。

私が見逃したことを説明できますか?

4

1 に答える 1

1

手動で作成したビューの「translatesAutoresizingMaskInotConstraints」機能を無効にしていないようです。

someView.translatesAutoresizingMaskIntoConstraints = NO;

これを NO に設定しないと、iOS はスプリングとストラット (自動サイズ変更マスクなど) の設定を制約に変換します。これらの制約は、ビジュアル フォーマット言語で作成している制約と競合しています。

constaints エラー出力にクラス 'NSAutoresizingMaskLayoutConstraint' が表示されるときはいつでも、変換をオフにしていないことを確認できます。

プログラムで作成するすべてのビューで、変換も有効にすることをお勧めします。

于 2013-03-29T18:28:17.330 に答える