在我的应用程序中,window.contentView大小为700 * 500,并且在我将view1添加为window.contentView的子视图后,我从xib初始化了一个名为view1的视图,其大小为480 * 300。需要自动将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));
}
view1 xib
我的应用:(红色视图是view1)
很奇怪view1的框架是“view1 frame {{0,0},{480,300}}”,但如下图所示,view1不在左上角位置。
答案 0 :(得分:0)
您可以通过更改IB中调整大小框正上方的原点框中的箭头位置来完成此操作。只需点击原点框的左上角,您的视图就会显示在左上角。
答案 1 :(得分:0)
“view1的帧是”view1 frame {{0,0},{480,这很奇怪 300}}“,但如下图所示,view1不在左上角位置。”
OS X不是iOS,AppKit不是UIKit。
iOS中基于UIKit的视图的默认坐标系是左上角(ULO),而OS X中基于AppKit的视图的默认坐标系是左下角(LLO)。
因此,红色视图的框架为{{0, 0}, {480, 300}}
是有意义的,因为它的原点位于{0, 0}
,这是窗口contentView
的左下角。
与iOS中的某些UIViewController
不同,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
,而不是将视图控制器的view
作为子视图添加到窗口的contentView
,而是调用NSBox
的{{1}}和传递视图控制器的视图:
setContentView:
正如[self.box setContentView:self.rootViewController.view];
的{{3}}方法中所述,您传递的视图“...已调整大小以适应框的当前内容区域,并且该框标记为重新显示。”换句话说,该框会自动处理将视图大小调整为适合您的大小。