1

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

主菜单.xib:

普通子视图: 在此处输入图像描述

窗口展开后: 在此处输入图像描述

子视图切换,然后切换回来: 在此处输入图像描述

约束:

主菜单.xib: 在此处输入图像描述

BlockViewController.xib: 在此处输入图像描述

4

2 回答 2

5

弄清楚了!真的很简单,只要在每个 ViewController 子类的 awakeFromNib 方法中写一行代码:

[self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
于 2013-02-22T20:28:54.837 回答
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];

文档中有更多关于此的内容。注意调试技巧 - 非常有用,以至于不可或缺。

于 2013-02-21T22:24:24.417 回答