不可调整大小的窗口swift

时间:2015-03-30 05:15:33

标签: macos swift nswindow window-resize nsviewcontroller

我有一个名为NSViewController的{​​{1}},我不需要让用户调整它。当然,我可以在每次用户尝试时重新调整它,但有没有办法让用户打开一个窗口到全屏,或者拉伸窗口?

5 个答案:

答案 0 :(得分:11)

编辑/更新: Xcode 8.2.1•Swift 3.0.2

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


删除以禁用:

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: NSWindowStyleMask) {
        window.styleMask.remove(member)
    }
    func insert(_ member: NSWindowStyleMask) {
        window.styleMask.insert(member)
    }
    @IBAction func toggle(_ sender: NSButton) {
        switch sender.state {
        case NSOnState:
            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 NSOffState:
            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

答案 1 :(得分:6)

我通过

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

答案 2 :(得分:5)

正确的方法是使用bitwise operators

禁用调整大小:

window?.styleMask &= ~NSResizableWindowMask

启用调整大小:

window?.styleMask |= NSResizableWindowMask

答案 3 :(得分:2)

除了当前的答案之外,这个答案可能会有所帮助。通过setHiddenNSWindowZoomButton

一起使用NSWindow,这也是一种很简单的方法

将功能设置为#import "CustomWindow.h" @implementation CustomWindow - (void)awakeFromNib { NSButton *zoomButton = [self standardWindowButton:NSWindowZoomButton]; [zoomButton setHidden:YES]; } @end 的子类:

<强>目标C

import CustomWindow

class CustomWindow {

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

Swift

Zoom

将自定义类连接到IB中的窗口,现在应隐藏for (expr1; expr2; expr3) code; 按钮!

答案 4 :(得分:2)

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

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