不可调整大小 window swift

Non-resizable window swift

我有一个名为 HardnessNSViewController,我不需要让用户调整它的大小。当然,每次用户尝试时我都可以调整它的大小,但是有什么办法可以不让用户打开 window 到全屏,或者拉伸 window?

edit/update: Xcode 10.2 • Swift 5

NSWindow 有一个名为 styleMask 的 属性,它允许您控制对用户可用的控件类型。如果您不想让用户调整 window 的大小,您必须使用变异方法 remove(member: NSWindowStyleMask) 删除样式掩码 .resizable。要再次启用它,您需要使用变异方法 insert(member: NSWindowStyleMask)。请注意,它还将禁用 window:

的全屏模式

删除以禁用:

window.styleMask.remove(.resizable)

正在插入以启用

window.styleMask.insert(.resizable)

样本

import Cocoa
class ViewController: NSViewController {
    @IBOutlet weak var closable: NSButton!
    @IBOutlet weak var miniaturizable: NSButton!
    @IBOutlet weak var resizable: NSButton!
    @IBOutlet weak var titled: NSButton!
    lazy var window: NSWindow! = self.view.window
    func remove(_ member: NSWindow.StyleMask) {
        window.styleMask.remove(member)
    }
    func insert(_ member: NSWindow.StyleMask) {
        window.styleMask.insert(member)
    }
    @IBAction func toggle(_ sender: NSButton) {
        switch sender.state {
        case .on:
            switch sender {
            case closable: insert(.closable)
            case miniaturizable: insert(.miniaturizable)
            case resizable: insert(.resizable)
            case closable: insert(.closable)
            case titled: insert(.titled)
            default: break
            }
        case .off:
            switch sender {
            case closable: remove(.closable)
            case miniaturizable: remove(.miniaturizable)
            case resizable: remove(.resizable)
            case closable: remove(.closable)
            case titled: remove(.titled)
            default: break
            }
        default: break
        }
    }
}

Sample Project

除当前答案外,此答案可能还有一些帮助。还有一个很好的简单方法可以通过使用 setHiddenNSWindowZoomButton

来完成此操作

将功能设置为 NSWindow 的子 class:

Objective-C

#import "CustomWindow.h"

@implementation CustomWindow

- (void)awakeFromNib {

NSButton *zoomButton = [self standardWindowButton:NSWindowZoomButton];
[zoomButton setHidden:YES];

}

@end

Swift

import CustomWindow

class CustomWindow {

    func awakeFromNib() {
        var zoomButton: NSButton = self.standardWindowButton(NSWindowZoomButton)
        zoomButton.setHidden(true)
    }
}

在 IB 中将自定义 class 连接到您的 window,现在应该隐藏 Zoom 按钮!

正确的方法是使用 bitwise operators

禁用 调整大小:

window?.styleMask &= ~NSResizableWindowMask

启用 调整大小:

window?.styleMask |= NSResizableWindowMask

Swift 3 的更优雅的解决方案,以便 |可以使用运算符:

public func | (left: NSWindowStyleMask, right: NSWindowStyleMask) -> NSWindowStyleMask {
    return NSWindowStyleMask(rawValue: left.rawValue | right.rawValue)
}

我通过

中的一行代码解决了不可调整大小 window 的相同问题
override func viewDidAppear() {
    self.view.window?.styleMask.remove(NSWindowStyleMask.Resizable)
}