设置窗口可调整大小

Cri*_*ian 12 cocoa appkit nswindow

在IB中,可以通过选中"调整大小"复选框来轻松完成.我的问题是我希望我的主要NSWindow不能调整大小,直到点击一个按钮,然后我希望它可以调整大小.

我在互联网上搜索但找不到任何东西?窗口不能调整大小或不能以编程方式调整大小吗?

在此先感谢大家!

Ken*_*ses 40

从10.6开始,您可以使用更改窗口的样式蒙版-[NSWindow setStyleMask:].所以,你会做这样的事情:

在Objective-C中

要使其可调整大小:

window.styleMask |= NSWindowStyleMaskResizable;
Run Code Online (Sandbox Code Playgroud)

要使其不可调整大小:

window.styleMask &= ~NSWindowStyleMaskResizable;
Run Code Online (Sandbox Code Playgroud)

在斯威夫特

要使其可调整大小:

mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
Run Code Online (Sandbox Code Playgroud)

要使其不可调整大小:

mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
Run Code Online (Sandbox Code Playgroud)

  • 对于 Swift 3,将此代码放在 viewDidAppear 中: view.window!.styleMask.remove(NSWindowStyleMask.resizable) (2认同)
  • 更具可读性的Swift版本将是`mainWindow.styleMask.insert(.resizable)`或`mainWindow.styleMask.remove(.resizable)`。您可以在此处阅读有关SetAlgebra的更多信息:https://developer.apple.com/documentation/swift/setalgebra (2认同)

uli*_*ess 7

针对此问题的Swift 3解决方案是使用以下所述的OptionSet类:

https://developer.apple.com/reference/swift/optionset

简而言之:

要替换标志集,您现在可以执行以下操作:

myWindow.styleMask = [ .resizable, .titled, .closable ]
Run Code Online (Sandbox Code Playgroud)

要添加标志,请执行以下操作:

myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )
Run Code Online (Sandbox Code Playgroud)

要删除标记,例如:

myWindow.styleMask.remove( [ .resizable ] )
Run Code Online (Sandbox Code Playgroud)