我正在使用NSView在我的主视图控制器中调用此详细信息视图,其中将根据主视图添加所有自动布局约束。我将添加一个子视图,根据用户输入将此子详细信息调用到此详细信息视图。此子详细信息视图包含许多视图,其中根据子详细信息视图添加了约束。将子细节添加到细节视图作为子视图时,我通过获取细节视图的框架并设置x = 0来设置框架y = 0;。我的问题是,当用户最大化窗口并选择用户时,我将子详细信息视图添加到详细信息视图 子详细信息的大小子视图保持不变,但子详细信息视图会根据需要自动调整大小。任何人都可以指导我做错了什么。下面我将分享您在链接中添加子视图和输出视图的代码 我不想要空白的蓝色空间。
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];
答案 0 :(得分:3)
我可以找到答案,因为在添加子视图时我们没有添加约束来使视图适合超级视图。
+(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];
}