设置窗口可调整大小

时间:2012-05-06 19:47:20

标签: cocoa nswindow appkit

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

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

先谢谢大家!

6 个答案:

答案 0 :(得分:40)

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

在Objective-C

使其可调整大小:

window.styleMask |= NSWindowStyleMaskResizable;

使其不可调整大小:

window.styleMask &= ~NSWindowStyleMaskResizable;

在Swift中

使其可调整大小:

mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable

使其不可调整大小:

mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable

答案 1 :(得分:7)

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

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

简而言之:

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

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

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

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

删除标记,例如:

myWindow.styleMask.remove( [ .resizable ] )

答案 2 :(得分:2)

创建窗口后无法更改窗口的样式蒙版,但可以将窗口的最小和最大帧大小设置为相同的大小。在您和可调整大小的窗口从笔尖唤醒之后执行此操作,然后在用户单击按钮时更改最大尺寸和可选的最小尺寸。

答案 3 :(得分:2)

在Swift 3中,

if enabled {
  window.styleMask.update(with: .resizable)
} else {
  window.styleMask.remove(.resizable)
}

答案 4 :(得分:1)

在Xcode 8 / Swift 3中,尝试类似:

top:0;

答案 5 :(得分: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)。