Xcode,自定义视图 - 零帧/边界

时间:2013-06-26 10:09:27

标签: xcode macos cocoa view interface-builder

在我的应用中,我需要splitView,并且能够将自己的视图插入到窗格中。

为此,在“界面”构建器中,我创建了一个带有两个分隔符(三个窗格)的SplitView,并将这三个窗格中的“自定义视图”添加为IBOutlets到我的相应窗格查看控制器。但是,当我查询IBOutlets的帧/边界大小时,它们都是0.00000。

为什么我在Xcode中创建的自定义视图大小为0?我该如何解决这个问题?

UPD:用于查询窗格的框架/边界的代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.logList = [[LogListViewController alloc] initWithNibName:LOGLISTXIB bundle:nil];
        [self logARect:self.leftPane.bounds withName:@"LeftPane bounds"];
        [self logARect:self.leftPane.frame withName:@"LeftPane Frame"];
    }
}
- (void) logARect:(NSRect) theFrame withName:(NSString *)name {
    NSLog(@"%@ frame: %lf, %lf, %lf, %lf", name, theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height);
}

UPD2 同时,当我通过self.view.subviews[0]访问窗格时,我得到了正确的尺寸。

2 个答案:

答案 0 :(得分:1)

当你试图获得这些职位时,可能还没有提出意见。 viewDidLoad in NSViewController?问题指出loadView应该用于修改视图的布局。同一个问题中的这个answer显示了使Cocoa代码与Cocoa-touch代码类似的技巧。

答案 1 :(得分:1)

事实证明,初始化程序不是查询视图大小的地方,或者看起来如此。当我在-awakeFromNib方法中检查视图的大小时,它们是正确的。这似乎合乎逻辑。