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

时间:2015-02-11 07:13:07

标签: objective-c xcode cocoa nsview

我正在使用NSView在我的主视图控制器中调用此详细信息视图,其中将根据主视图添加所有自动布局约束。我将添加一个子视图,根据用户输入将此子详细信息调用到此详细信息视图。此子详细信息视图包含许多视图,其中根据子详细信息视图添加了约束。将子细节添加到细节视图作为子视图时,我通过获取细节视图的框架并设置x = 0来设置框架y = 0;。我的问题是,当用户最大化窗口并选择用户时,我将子详细信息视图添加到详细信息视图 子详细信息的大小子视图保持不变,但子详细信息视图会根据需要自动调整大小。任何人都可以指导我做错了什么。下面我将分享您在链接中添加子视图和输出视图的代码 enter image description here 我不想要空白的蓝色空间。

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];

1 个答案:

答案 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];
}
相关问题