OS X上的自动布局-使NSTextField填充超级视图



我无法让Auto Layout在OS X上工作。我想做的很简单,即我有一个NSTextField,它应该填充其超视图的整个空间。以下是我正在使用的最小工作示例代码:

@import AppKit;

int main() {
    @autoreleasepool {
        NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 300, 300)
                                                       styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask)
                                                         backing:NSBackingStoreBuffered
                                                           defer:NO];
        NSTextField *textField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
        textField.stringValue = @"Lorem ipsum dolor sit atmet.";
        [window.contentView addSubview:textField];
        textField.translatesAutoresizingMaskIntoConstraints = NO;
        window.contentView.translatesAutoresizingMaskIntoConstraints = NO;
        [textField setContentHuggingPriority:1
                              forOrientation:NSLayoutConstraintOrientationHorizontal];
        [textField setContentHuggingPriority:1
                              forOrientation:NSLayoutConstraintOrientationVertical];
        [window.contentView addConstraints:
            [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[textField]-|"
                                                    options:0
                                                    metrics:nil
                                                      views:@{@"textField": textField}]];
        [window.contentView addConstraints:
            [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[textField]-|"
                                                    options:0
                                                    metrics:nil
                                                      views:@{@"textField": textField}]];
        window.contentView.wantsLayer = YES;
        window.contentView.layer.borderWidth = 5;
        [window makeKeyAndOrderFront:nil];
        [[NSApplication sharedApplication] run];
        [textField release];
        [window release];
    }
    return EXIT_SUCCESS;
}

运行此操作时,文本字段不会出现。调整窗口大小时,可以清楚地看到内容视图的边框正在正确调整大小。我做错了什么?

我认为您不应该更改NSWindowcontentView行为,例如设置其translatesAutoresizingMaskIntoConstraints属性。

删除以下线路对我有效:

window.contentView.translatesAutoresizingMaskIntoConstraints = NO;

最新更新