在容器中查看控制器视图的Autolayout

时间:2013-07-18 00:45:37

标签: objective-c autolayout

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

Screenshot 1

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

Screenshot 2

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

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

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

Screenshot 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布局约束不会自动执行此操作,但我认为我更接近理解这里视图之间的关系。

1 个答案:

答案 0 :(得分:0)

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