Objective c 从xib自动调整子视图的大小

Objective c 从xib自动调整子视图的大小,objective-c,macos,cocoa,Objective C,Macos,Cocoa,在我的应用程序中,window.contentView的大小是700*500,我从xib初始化了一个名为view1的视图,它的大小是480*300,在我添加view1作为window.contentView的子视图后,我需要自动将view1的大小调整为700*500,我已经设置了autoresizingMask,但它不起作用 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { self.rootV

在我的应用程序中,window.contentView的大小是700*500,我从xib初始化了一个名为view1的视图,它的大小是480*300,在我添加view1作为window.contentView的子视图后,我需要自动将view1的大小调整为700*500,我已经设置了autoresizingMask,但它不起作用

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    self.rootViewController = [[TrendRootViewController alloc] initWithNibName:@"TrendRootViewController" bundle:[NSBundle mainBundle]];
    NSView *view1 =  self.rootViewController.view;
    [self.contentView addSubview:view1];
    NSLog(@"view1 frame %@",NSStringFromRect(view1.frame));
}
视图1 xib

我的应用程序:(红色视图为view1)


view1的帧是“view1帧{0,0},{480,300}”,这很奇怪,但如下图所示,view1不在左上角位置。

您可以通过更改IB中调整大小框右上方的原点框中箭头的位置来完成此操作。只需单击原点框的左上角,您的视图就会显示在左上角

view1的帧是“view1帧{0,0},{480, 300}”,但如下图所示,视图1不在左上角位置

OSX不是iOS,AppKit也不是UIKit

iOS中基于UIKit的视图的默认坐标系为左上角原点(ULO),而OS X中基于AppKit的视图的默认坐标系为左下角原点(LLO)

因此,红色视图的框架是
{0,0},{480,300}
,这是有意义的,因为它的原点是
{0,0}
,它是窗口
内容视图的左下角

与iOS中的某些
UIViewController
s不同,
NSViewController
不会自动调整其视图的大小以适应窗口的大小。如果希望视图的框架与窗口的框架匹配,可以使用两个不同的选项

一个选项是在将视图作为子视图添加到窗口的
contentView
之前,自己设置视图的框架:

NSView *redView = self.rootViewController.view; // force view to load
[redView setFrame:NSMakeRect(0.0, 0.0, NSWidth(self.window.frame),
                                       NSHeight(self.window.frame))];
[self.window.contentView addSubview:redView];
或者,在Interface Builder中,您可以向窗口添加与窗口内容视图大小相同的
NSBox
。在IB中,将框的标题位置设置为
None
,框类型设置为
Custom
,边框类型设置为
None
。将其“弹簧和支柱”(自动调整大小遮罩)设置为与view1.xib中视图的相同(以便在调整窗口大小时,框也随之调整大小)。然后为该框创建一个
IBOutlet
,而不是将视图控制器的
视图作为子视图添加到窗口的
contentView
,调用
NSBox
setContentView:
并传递视图控制器的视图:

[self.box setContentView:self.rootViewController.view];
正如
NSBox
的方法中所述,您传入的视图“…已调整大小以适合框的当前内容区域,并且框已标记为可重新显示”。换句话说,该框会自动将视图调整到适合您的大小