0
votes

I can't get Auto Layout to work on OS X. What I'm trying to do is pretty simple, namely I have an NSTextField that is supposed to fill the entire space of its superview. Here's the minimal working example code I'm using:

@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;
}

When I run this, the text field doesn't appear. When you resize the window, you can clearly see the border of the content view resizing properly. What am I doing wrong?

1

1 Answers

1
votes

I believe you shouldn't alter NSWindow's contentView behavior, e.g. setting its translatesAutoresizingMaskIntoConstraints property.

Removing the following line works for me:

window.contentView.translatesAutoresizingMaskIntoConstraints = NO;