I have a single window with a single custom view in it, and I want the custom view to resize with the window so that it entirely fills it at any time. If I write:
NSView *contentView = [self.window contentView];
CustomView *customView = [[CustomView alloc] initWithFrame:[contentView bounds]];
[contentView addSubview:customView];
[contentView addConstraint:
[NSLayoutConstraint constraintWithItem:customView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeWidth
multiplier:1
constant:0]];
[contentView addConstraint:
[NSLayoutConstraint constraintWithItem:customView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:contentView
attribute:NSLayoutAttributeHeight
multiplier:1
constant:0]];
Then the window doesn't let me resize it.
If I add:
[customView setTranslatesAutoresizingMaskIntoConstraints:NO];
Then the custom view doesn't appear (drawRect:
seems to never be called).
I tried different ways (including the visual format @"|[customview]|"
) but I always run into the same problems. I know it could be done with the older autoresizing system, with:
[customView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
but I want to use the Cocoa Auto Layout system, and I want to use it for more complicated cases (like several custom views that always fill the window).
Does anyone know what is wrong and how I should use the Auto Layout system to get the result that I want?
[[contentView constraints].window visualizeConstraints:contentView.constraints];
– Regexident