18

在 IB 中,这可以通过打开或关闭“调整大小”复选框来轻松完成。我的问题是我希望我的主 NSWindow 不能调整大小,直到单击一个按钮,然后我希望它可以调整大小。

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

提前谢谢大家!

4

6 回答 6

52

从 10.6 开始,您可以使用-[NSWindow setStyleMask:]. 所以,你会做这样的事情:

在 Objective-C 中

要使其可调整大小:

window.styleMask |= NSWindowStyleMaskResizable;

使其不可调整大小:

window.styleMask &= ~NSWindowStyleMaskResizable;

在斯威夫特

要使其可调整大小:

mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable

使其不可调整大小:

mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
于 2012-05-06T20:21:41.490 回答
8

这个问题的 Swift 3 解决方案是使用以下OptionSet描述的类:

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

简而言之:

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

myWindow.styleMask = [ .resizable, .titled, .closable ]

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

myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )

要删除标志,例如:

myWindow.styleMask.remove( [ .resizable ] )
于 2016-11-01T21:49:51.700 回答
4

创建窗口后不能更改其样式掩码,但可以将窗口的最小和最大框架大小设置为相同大小。在您和您的可调整大小的窗口从 nib 唤醒之后执行此操作,然后在用户单击按钮时将最大和可选的最小尺寸更改回来。

于 2012-05-06T19:54:44.483 回答
4

在 Swift 3 中,

if enabled {
  window.styleMask.update(with: .resizable)
} else {
  window.styleMask.remove(.resizable)
}
于 2017-03-04T10:42:53.327 回答
1

在 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)
}
于 2016-10-26T11:51:44.013 回答
0

我是 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)。

于 2019-02-21T20:44:19.563 回答