如何根据自动布局调整子视图子视图的大小?

How to resize subview subview based on autolayout?

我有一个 NSView 让我们在我的主视图控制器中调用这个 Detail View,其中将根据主视图添加所有自动布局约束。我将添加一个子视图,让我们根据用户输入将此 sub detail 调用到此 Detail View。此子详细信息视图包含许多视图,根据 子详细信息 视图为其添加了约束。在将 sub detail 作为子视图添加到 DetailView 时,我通过获取 DetailView[= 的框架来设置框架25=] 并设置 x = 0 和 y = 0;。我的问题是,当用户最大化 window 和用户 select 并且我将 sub detail 视图添加到 Detail View sub detail 子视图的大小保持不变,但 sub detail 视图会根据需要自动调整大小。任何人都可以指导我我做错了什么。下面我将与您分享我在 link 中添加子视图和输出视图的代码 我不要空白的蓝色 space.

NSRect f = detailView.frame;
f.origin.x = 0;
f.origin.y = 0;
ConfigLogin *subDetail = [[ConfigLogin alloc] initWithFrame:f];
[subDetail setWantsLayer:YES];
[subDetail setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
[subDetail setTranslatesAutoresizingMaskIntoConstraints:YES];
subDetail.layer.backgroundColor = [NSColor blueColor].CGColor;
subDetail.frame = f;
[detailView addSubview:detailView];

我可以找到答案,因为在添加子视图时我们没有添加约束以使视图适合父视图。

  +(void) fitSubViewToSuperView:(NSView *) subview superView:(NSView *) superView
  {
NSLayoutConstraint *width    = [NSLayoutConstraint
                                constraintWithItem:subview
                                attribute:NSLayoutAttributeWidth
                                relatedBy:0
                                toItem:superView
                                attribute:NSLayoutAttributeWidth
                                multiplier:1.0
                                constant:0];

NSLayoutConstraint *height   = [NSLayoutConstraint
                                constraintWithItem:subview
                                attribute:NSLayoutAttributeHeight
                                relatedBy:0
                                toItem:superView
                                attribute:NSLayoutAttributeHeight
                                multiplier:1.0
                                constant:0];

NSLayoutConstraint *top      = [NSLayoutConstraint
                               constraintWithItem:subview
                               attribute:NSLayoutAttributeTop
                               relatedBy:NSLayoutRelationEqual
                               toItem:superView
                               attribute:NSLayoutAttributeTop
                               multiplier:1.0f
                               constant:0.f];

NSLayoutConstraint *leading = [NSLayoutConstraint
                               constraintWithItem:subview
                               attribute:NSLayoutAttributeLeading
                               relatedBy:NSLayoutRelationEqual
                               toItem:superView
                               attribute:NSLayoutAttributeLeading
                               multiplier:1.0f
                               constant:0.f];
[superView addConstraint:width];
[superView addConstraint:height];
[superView addConstraint:top];
[superView addConstraint:leading];
}