pomo_mondreganto
pomo_mondreganto

Reputation: 2074

Resizing the window according to a variable swift

I have a NSViewController and a variable num. I want to change the size of the window dynamically according to that variable. Is there any way to do that in swift?

Upvotes: 9

Views: 12813

Answers (3)

slashlos
slashlos

Reputation: 933

I needed to toggle viewing a text view so I overlaid the window an invisible view - hideRect just short of the text view; in this way I can resize to the smaller (hideRect) and restore later to the original size - origRect. Hide and original rect captured at viewDidLoad(). Swift 3/Xcode 8.3.3

// class global contants
let kTitleUtility =     16
let kTitleNormal =      22

@IBOutlet var hideView: NSView!
var hideRect: NSRect?
var origRect: NSRect?

@IBAction func toggleContent(_ sender: Any) {
    // Toggle content visibility
    if let window = self.view.window {
        let oldSize = window.contentView?.bounds.size
        var frame = window.frame
        if toggleButton.state == NSOffState {

            frame.origin.y += ((oldSize?.height)! - (hideRect?.size.height)!)
            window.setFrameOrigin(frame.origin)
            window.setContentSize((hideRect?.size)!)

            window.showsResizeIndicator = false
            window.minSize = NSMakeSize((hideRect?.size.width)!,(hideRect?.size.height)!+CGFloat(kTitleNormal))
            creditScroll.isHidden = true
        }
        else
        {
            let hugeSize = NSMakeSize(CGFloat(Float.greatestFiniteMagnitude), CGFloat(Float.greatestFiniteMagnitude))

            frame.origin.y += ((oldSize?.height)! - (origRect?.size.height)!)
            window.setFrameOrigin(frame.origin)
            window.setContentSize((origRect?.size)!)

            window.showsResizeIndicator = true
            window.minSize = NSMakeSize((origRect?.size.width)!,(origRect?.size.height)!+CGFloat(kTitleNormal))
            window.maxSize = hugeSize
            creditScroll.isHidden = false
        }
    }
}

This also preserved the widow's visual origin, and sizing minimum.

Upvotes: 0

melMass
melMass

Reputation: 5159

In Swift 3 to resize the window you use setFrame.

An example from the ViewController:

func resizeWin(size:(CGFloat,CGFloat)){

    self.view.window?.setFrame(NSRect(x:0,y:0,width:size.0,height:size.1), display: true)

}

Upvotes: 7

Eric Aya
Eric Aya

Reputation: 70096

Let's say your window has an IBOutlet named "window", and your dynamic number is named "myDynamicNumber":

func resize() {
    var windowFrame = window.frame
    let oldWidth = windowFrame.size.width
    let oldHeight = windowFrame.size.height
    let toAdd = CGFloat(myDynamicNumber)
    let newWidth = oldWidth + toAdd
    let newHeight = oldHeight + toAdd
    windowFrame.size = NSMakeSize(newWidth, newHeight)
    window.setFrame(windowFrame, display: true)
}

Upvotes: 14

Related Questions