4

我有一个 NSWindow,里面有 2 个容器视图,都在一个 xib 中,如下所示:

截图 1

在另一个 xib 中,我有一个侧边栏视图,由不同的视图控制器管理,如下所示:

截图 2

当我将子视图添加到容器视图时,我会这样做:

self.sidebarViewController.view.frame = self.sidebarContainer.bounds;
[self.sidebarContainer addSubview:self.sidebarViewController.view];

当我构建并运行并调整此窗口的大小时,会发生以下情况:

截图 3

容器正确跟踪其超级视图的高度,但侧边栏视图本身不跟踪容器的高度。

如何进行设置,以便在调整窗口大小时,sidebarVCs 视图的高度会跟踪容器的高度?


我想我已经这样解决了:

[self.sidebarViewController.view setTranslatesAutoresizingMaskIntoConstraints:NO];

NSLayoutConstraint *w = [NSLayoutConstraint constraintWithItem:self.sidebarViewController.view attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:0.0 constant:150.0];

NSArray *c1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|"
                                        options:0
                                        metrics:nil
                                          views:@{ @"view":self.sidebarViewController.view }];
[self.sidebarContainer addConstraints:c1];
[self.sidebarContainer addConstraint:w];

我仍然不明白为什么 autoresizemask 布局约束不会自动执行此操作,但我认为我更接近于理解这里的视图之间的关系。

4

1 回答 1

0

使用 NSBoxes 作为容器。在您的侧边栏中,在 NSView 内添加一个 NSBox 并将所有边约束到视图。然后,当您想在侧边栏的视图中交换时,您可以调用容器(NSBox 对象)setContentView:。

于 2014-04-06T05:27:30.163 回答