2

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

我创建了一个按钮,并将其放置在内容视图中。然后我尝试使用约束使其填充窗口。如您所见,它声称布局不明确。但是当我点击那个按钮来“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 回答