0

在我的应用程序中,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));
}

view1 xib 在此处输入图像描述

我的应用程序:(红色视图是 view1) 在此处输入图像描述

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

4

2 回答 2

0

您可以通过更改 IB 中调整大小框正上方的 Origin 框中的箭头位置来做到这一点。只需单击原点框的左上角,您的视图就会出现在左上角。

于 2013-04-15T01:37:55.083 回答
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

UIViewController与iOS中的某些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 中,将框的 Title Position 设置为None,Box Type 设置为Custom,Border Type 设置为None。将其“弹簧和支柱”(自动调整大小的掩码)设置为与 view1.xib 中的视图相同(这样当您调整窗口大小时,框也会随之调整大小)。然后为盒子创建一个IBOutlet,而不是将视图控制器view作为子视图添加到窗口中contentView,调用并传递视图控制器NSBoxsetContentView:视图:

[self.box setContentView:self.rootViewController.view];

NSBox'ssetContentView:方法中所述,您传入的视图“...已调整大小以适应框的当前内容区域,并且框被标记为重新显示。” 换句话说,框会自动处理将视图调整为适合您的大小。

于 2013-04-15T18:36:16.033 回答