Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 设置窗口大小_Cocoa_Nswindow_Appkit - Fatal编程技术网

Cocoa 设置窗口大小

Cocoa 设置窗口大小,cocoa,nswindow,appkit,Cocoa,Nswindow,Appkit,在IB中,通过选中或关闭“调整大小”复选框,可以轻松完成此操作。 我的问题是我希望我的主窗口不可调整大小,直到单击一个按钮,然后我希望它可以调整大小 我搜遍了互联网,但什么也找不到?窗口是否可以不调整大小或不以编程方式设置 提前谢谢大家 创建窗口后不能更改其样式掩码,但可以将窗口的最小和最大帧大小设置为相同的大小。在您和可调整大小的窗口从nib唤醒后执行此操作,然后在用户单击按钮时更改最大和可选的最小大小。自10.6以来,您可以使用-[NSWindow setStyleMask:更改窗口的样式掩

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

我搜遍了互联网,但什么也找不到?窗口是否可以不调整大小或不以编程方式设置


提前谢谢大家

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

自10.6以来,您可以使用
-[NSWindow setStyleMask:
更改窗口的样式掩码。所以,你可以这样做:

在Objective-C中

要使其可调整大小,请执行以下操作:

window.styleMask |= NSWindowStyleMaskResizable;
window.styleMask &= ~NSWindowStyleMaskResizable;
mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
要使其不可调整大小,请执行以下操作:

window.styleMask |= NSWindowStyleMaskResizable;
window.styleMask &= ~NSWindowStyleMaskResizable;
mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
迅速地

要使其可调整大小,请执行以下操作:

window.styleMask |= NSWindowStyleMaskResizable;
window.styleMask &= ~NSWindowStyleMaskResizable;
mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable
要使其不可调整大小,请执行以下操作:

window.styleMask |= NSWindowStyleMaskResizable;
window.styleMask &= ~NSWindowStyleMaskResizable;
mainWindow.styleMask = mainWindow.styleMask | NSWindowStyleMaskResizable
mainWindow.styleMask = mainWindow.styleMask & ~NSWindowStyleMaskResizable

在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)
}
myWindow.styleMask = [ .resizable, .titled, .closable ]
myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )
myWindow.styleMask.remove( [ .resizable ] )

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

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

// 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)
}
myWindow.styleMask = [ .resizable, .titled, .closable ]
myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )
myWindow.styleMask.remove( [ .resizable ] )
要添加标志,请执行以下操作:

// 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)
}
myWindow.styleMask = [ .resizable, .titled, .closable ]
myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )
myWindow.styleMask.remove( [ .resizable ] )
要删除标志,请执行以下操作:

// 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)
}
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)
}

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

非常感谢,我想是它使窗口的大小可以调整吗?那么,如何使其不可调整大小?谢谢你的帮助!对于Swift 3,将此代码放入ViewDidDisplay:view.window!。styleMask.remove(NSWindowStyleMask.resizeable)更可读的Swift版本是
mainWindow.styleMask.insert(.resizeable)
或分别是
mainWindow.styleMask.remove(.resizeable)
。你可以在这里阅读更多关于集合代数的内容:你是什么意思?我在
windowDidLoad
message上成功地使用了Ken的代码我的知识一定已经过时了!现在总共有一个
setStyleMask:
方法: