为什么这个Cocoa布局模糊不清?

时间:2013-06-24 16:14:46

标签: cocoa autolayout

我想使用布局约束并以编程方式创建我的UI。这是一个简单的程序,我希望你能帮助我理解。在Interface Builder中,我只是采用了默认值 - NSWindow的默认值为contentView。以下是所有代码和截图。

我创建了一个按钮,并将其放在内容视图中。然后我尝试使用约束来填充窗口。如您所见,它声称布局不明确。但是,当我点击那个按钮“锻炼歧义”时,没有任何变化。文档说它应该选择不同的可能布局。

我还认为内容视图紧紧围绕着按钮并且没有填充窗口,但我不知道如何强制使用约束。

// 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

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您在运行循环的后续迭代中可视化约束,例如使用计时器或单击按钮,在布局引擎传递了它之后怎么办?它可能只是模棱两可,因为布局引擎尚未解决系统问题。

修改:我运行了您的代码,我看到了同样的问题。我现在也很难过。