2

レイアウトの制約を使用して、プログラムで UI を作成したいと考えています。これは簡単なプログラムです。理解を助けてくれることを願っています。Interface Builder では、単純にデフォルトNSWindowを使用しました。デフォルトの がありますcontentView。以下はすべてのコードとスクリーンショットです。

ボタンを 1 つ作成し、コンテンツ ビューに配置します。次に、制約を使用してウィンドウを埋めようとします。ご覧のとおり、レイアウトがあいまいであると主張しています。しかし、そのボタンをクリックして「Exercise Ambiguity」をクリックしても、何も変わりません。ドキュメントによると、別の可能なレイアウトを選択する必要があります。

また、コンテンツ ビューがボタンをしっかりと囲み、ウィンドウを埋めていないと思いますが、制約を強制する方法がわかりません。

// In AppDelegate.h

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    NSButton *_button;    
}
@property (assign) IBOutlet NSWindow *window;
@end

// In AppDelegate.m

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSView *contentView = (NSView*)_window.contentView;
    _button = [[NSButton alloc] init];
    _button.title = @"Test";

    _button.translatesAutoresizingMaskIntoConstraints = NO;
    contentView.translatesAutoresizingMaskIntoConstraints = NO;

    [contentView addSubview:_button];

    NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_button, contentView);
    NSMutableArray *constraints = [[NSMutableArray alloc] init];
    [constraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"|[_button]|" options:0 metrics:0 views:viewsDict]];
    [constraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_button]|" options:0 metrics:0 views:viewsDict]];

    [contentView addConstraints:constraints];
    [_window visualizeConstraints:constraints];

    printf("Is layout ambiguous? %d\n", contentView.hasAmbiguousLayout);
}

@end

ここに画像の説明を入力

4

1 に答える 1

0

レイアウト エンジンがパスを取得した後、たとえばタイマーを使用したり、ボタンをクリックしたりして、実行ループの後続の反復で制約を視覚化するとどうなるでしょうか? レイアウト エンジンがまだシステムを解決していないため、あいまいなだけかもしれません。

編集:コードを実行しましたが、同じ問題が発生しています。私も今、困っています。

于 2014-04-29T15:07:54.373 に答える