我有一个NSWindow,里面有2个容器视图,全部在一个xib中,如下所示:
在另一个xib中,我有一个侧边栏视图,由不同的视图控制器管理,如下所示:
当我将子视图添加到容器视图时,我这样做:
self.sidebarViewController.view.frame = self.sidebarContainer.bounds;
[self.sidebarContainer addSubview:self.sidebarViewController.view];
当我构建并运行并调整此窗口大小时,会发生以下情况:
容器正确跟踪其超视图的高度,但侧边栏视图本身不会跟踪容器的高度。
我如何进行设置,以便在调整窗口大小时,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布局约束不会自动执行此操作,但我认为我更接近理解这里视图之间的关系。
答案 0 :(得分:0)
使用NSBoxes作为容器。在侧边栏中,在NSView中添加一个NSBox,并将所有边限制在视图中。然后,当你想交换侧栏的视图时,你可以调用容器(NSBox对象)setContentView:。