Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Non-resizable window swift

I have a NSViewController named Hardness, and I need not to let user resize it. Of course, I can just resize it back every time the users tries, but is there any way just not to let user open a window to full screen, or to stretch the window?

like image 331
pomo_mondreganto Avatar asked Mar 30 '15 05:03

pomo_mondreganto


3 Answers

edit/update: Xcode 10.2 • Swift 5

NSWindow has a property called styleMask that allows you to control what kinds of control will be available to the user. If you don't want to allow the user to resize the window you have to remove the style mask .resizable using the mutating method remove(member: NSWindowStyleMask). To enable it again you need to use the mutating method insert(member: NSWindowStyleMask). Note that it will also disable the full screen mode for that window:


removing to disable:

window.styleMask.remove(.resizable)

inserting to enable

window.styleMask.insert(.resizable)

Sample

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

like image 101
Leo Dabus Avatar answered Nov 16 '22 23:11

Leo Dabus


I solved the same issue with the non-resizable window by one line of code in

override func viewDidAppear() {
    self.view.window?.styleMask.remove(NSWindowStyleMask.Resizable)
}
like image 9
Dawy Avatar answered Nov 17 '22 00:11

Dawy


The correct approach would be to use bitwise operators.

Disable resize:

window?.styleMask &= ~NSResizableWindowMask

Enable resize:

window?.styleMask |= NSResizableWindowMask
like image 6
Vin Gazoil Avatar answered Nov 16 '22 23:11

Vin Gazoil