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



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

如果在保持窗口大小不变的情况下添加/删除子视图,效果会很好。但如果我添加子视图并将其最大化,然后移除再添加,它就会变得混乱。

有些时候,它直接发生为:

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

我找不到解决办法。请帮我解决这个问题。示例代码和示例项目附在此处。

//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];
    }
}

我得到了答案,

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

- (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];
}

最新更新