在调整窗口大小的同时在NSWindow中添加子视图,UI变得混乱

时间:2014-09-19 15:20:23

标签: objective-c cocoa nswindow autoresize nsviewcontroller

我有一个窗口并添加了一个子视图,这个子视图是另一个视图的容器(使用NSViewController访问和添加)。 我已禁用自动布局并从弹簧调整大小。子视图在窗口调整大小时正确调整大小。

如果我添加/删除子视图保持窗口大小相同,它可以正常工作。但是,如果我添加子视图并最大化它然后删除然后添加,它会变得混乱。

有一段时间它直接发生在:

打开主窗口(以小尺寸打开)。最大化它,然后添加子视图,子视图添加到其在xib中绘制的原始大小。预期的行为是子视图应该扩展并覆盖主窗口。

我无法找到解决方案。请帮我解决这个问题。示例代码和sample project附在此处。

//In AppDelegate

- (IBAction)buttonClicked:(id)sender {
    if (!self.myVC) {
        self.myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    }
    [self.containerView addSubview:self.myVC.view];
}

- (IBAction)clearClicked:(id)sender {

    for (NSView *view in self.containerView.subviews) {
        [view removeFromSuperview];
    }

}

1 个答案:

答案 0 :(得分:0)

我得到了答案,

在将视图添加到容器视图之前,我获取容器的矩形并设置子视图的框架。

- (IBAction)buttonClicked:(id)sender {
    if (!self.myVC) {
        self.myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    }

    NSRect rect = NSMakeRect(0, 0, self.containerView.frame.size.width, self.containerView.frame.size.height);
    [self.myVC.view setFrame:rect];

    [self.containerView addSubview:self.myVC.view];
}