使用窗口调整自定义视图的大小

时间:2013-02-20 14:11:13

标签: objective-c xcode macos interface-builder

所以我已经看过几次这个问题,但是没有找到解决我问题的答案。现在我基本上有MainMenu.xib,标签位于顶部,一个大的自定义视图和一个位于底部的按钮,用于切换自定义视图的子视图(见下图)。我已将窗口和自定义视图设置为在界面构建器中自动调整子视图,并且所有按钮,标签等都有将它们与视图侧面相关联的约束,但是当我调整窗口大小时,子视图的内容会执行没有调整大小。我认为自定义视图正在调整窗口大小,因为当我使用按钮切换子视图时,加载的子视图会随窗口调整大小,它们只是没有实时调整窗口大小。

MainMenu.xib:

普通子视图: enter image description here

扩展窗口后: enter image description here

子视图切换然后切换回: enter image description here

约束:

MainMenu.xib: enter image description here

BlockViewController.xib: enter image description here

2 个答案:

答案 0 :(得分:5)

想出来!非常简单,每个ViewController子类的awakeFromNib方法中只有一行代码:

[self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

答案 1 :(得分:1)

从评论中的图片和描述看来,问题是自定义视图没有获得任何布局约束来确定如何调整子视图的大小。

以下代码(直接在浏览器中输入,请注意)应提供必要的约束,以将子视图的边框“粘合”到自定义视图。

[self.customView addSubview: self.blockSubView.view];
self.blockSubView.view.frame = self.customView.bounds;

NSView *blockSubView = self.blockSubView.view;

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(blockSubView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|[blockSubView]|"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary];


constraints = [constraints arrayByAddingObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat:@"V|[blockSubView]|"
                                                               options:0
                                                               metrics:nil
                                                                 views:viewsDictionary]];

[self.customView addConstraints: constraints];

docs中有更多相关内容。注意调试的技巧 - 非常有用,是必不可少的。