Objective c 是否防止调整显示为图纸的视图控制器的大小?

Objective c 是否防止调整显示为图纸的视图控制器的大小?,objective-c,macos,cocoa,Objective C,Macos,Cocoa,如果使用方法presentViewControllerasheet或使用一系列样式“sheet”将视图控制器显示为图纸,是否有方法防止视图调整大小 请注意,模态/显示序列可以移植到窗口控制器,该控制器可以从情节提要本身设置为不可调整大小。默认情况下,popover类型的序列不可调整大小 您是否尝试过设置图纸视图控制器的-首选内容大小?如果失败,那么在-viewDidLoad上向视图控制器的视图添加宽度和高度NSLayoutConstraints怎么样?上述方法对我不起作用。 self.view.

如果使用方法
presentViewControllerasheet
或使用一系列样式“sheet”将视图控制器显示为图纸,是否有方法防止视图调整大小

请注意,模态/显示序列可以移植到窗口控制器,该控制器可以从情节提要本身设置为不可调整大小。默认情况下,popover类型的序列不可调整大小


您是否尝试过设置图纸视图控制器的
-首选内容大小
?如果失败,那么在
-viewDidLoad
上向视图控制器的视图添加宽度和高度
NSLayoutConstraint
s怎么样?

上述方法对我不起作用。
self.view.autoresizesSubviews=NO

如果上述方法不起作用,viewcontroller中的这一行就应该起作用,因为其他解决方案对我都不起作用,所以我最终使用了
NSWindow
作为图纸控制器(而不是
NSViewController

在头文件中声明
NSWindowController
对象:

NSWindowController *detailWindow;
要以图纸的形式打开窗口,请使用以下代码:

NSStoryboard *storyFile = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
detailWindow = [storyFile instantiateInitialController];
[self.view.window beginSheet:detailWindow.window completionHandler:nil];
要关闭窗口,请执行以下操作:

[self.view.window endSheet:detailWindow.window];
要停止调整窗口工作表的大小,只需在interface builder中设置
NSWindow
最小/最大大小:


就这样,超级简单!(别忘了将窗口控制器设置为初始控制器)。

这对我很有效。工作表不再可调整大小:

override func viewWillLayout() {
    preferredContentSize = view.frame.size
}

PreferredContentSize修复了这个问题。在我找到这篇文章之前,我一直在搜索,PreferredContentSize非常神奇。。。在Swift的viewDidLoad:self.preferredContentSize=NSSize(宽度:500.0,高度:700.0)中,在Interface Builder中无法执行此操作?这里有一个小小的修改,它将自动从IB/constraints中提取大小:
preferredContentSize=view.frame.size
我不依赖它。由于自动布局、核心动画以及可能更多的内容在不同时间接触视图帧,因此无法保证布局周期的计时。因此,不应将布局约束绑定到任何对象的框架。幸运的是,它现在能正常工作,但这种情况随时可能改变。