在IB中,这可以通过选中或关闭"调整大小"复选框来轻松完成。我的问题是我希望我的主 NSWindow 不可调整大小,直到单击按钮,然后我希望它可调整大小。
我已经搜索了互联网,但找不到任何东西?是否可以使窗口不可调整大小或不以编程方式调整?
提前感谢大家!
从 10.6 开始,您可以使用 -[NSWindow setStyleMask:]
更改窗口的样式掩码。 所以,你会做这样的事情:
在 Objective-C 中
要使其可调整大小,请执行以下操作:
window.styleMask |= NSWindowStyleMaskResizable;
要使其不可调整大小,请执行以下操作:
window.styleMask &= ~NSWindowStyleMaskResizable;
在斯威夫特
要使其可调整大小,请执行以下操作:
mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
要使其不可调整大小,请执行以下操作:
mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
Swift 3 解决此问题的解决方案是使用以下描述的 OptionSet
类:
https://developer.apple.com/reference/swift/optionset
总之:
要替换标志集,您现在执行以下操作:
myWindow.styleMask = [ .resizable, .titled, .closable ]
要添加标志,请执行以下操作:
myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )
要删除标志,如下所示:
myWindow.styleMask.remove( [ .resizable ] )
创建窗口后无法更改窗口的样式蒙版,但可以将窗口的最小和最大框架大小设置为相同的大小。在你和可调整大小的窗口从笔尖唤醒后执行此操作,然后在用户单击按钮时将最大大小和最小大小(可选)更改回来。
在 Swift 3 中,
if enabled {
window.styleMask.update(with: .resizable)
} else {
window.styleMask.remove(.resizable)
}
在 Xcode 8/Swift 3 中,尝试如下操作:
// e.g., on a view controller’s viewDidAppear() method:
if let styleMask = view.window?.styleMask
{
view.window!.styleMask = NSWindowStyleMask(rawValue: styleMask.rawValue | NSWindowStyleMask.resizable.rawValue)
}
我是macOS开发的新手。以上解决方案都不适合我(Swift 4.2)。我也没有学到那么多(复制/粘贴对此没有帮助)。
我创建了这个NSWindow子类。我在界面构建器中使用它。
class MainDocumentChooserW: NSWindow {
// NOTE: This method is called when the Window is used via Interface builder.
// Setting the styleMask like this will override the IB settings.
override init(contentRect: NSRect, styleMask style: NSWindow.StyleMask, backing backingStoreType: NSWindow.BackingStoreType, defer flag: Bool) {
super.init(contentRect: contentRect, styleMask: style, backing: backingStoreType, defer: flag)
styleMask = [.miniaturizable, .titled, .closable]
}
}
在macOS上测试:High Sierra 10.13.6(17G5019)。