Set NSWindow Size programmatically

前端 未结 6 2056
栀梦
栀梦 2021-02-01 19:19

How can I set the window size programmatically? I have a window in IB and I want to set the size of it in my code to make it larger.

相关标签:
6条回答
  • 2021-02-01 20:00

    Use -setFrame:display:animate: for maximum control:

    NSRect frame = [window frame];
    frame.size = theSizeYouWant;
    [window setFrame: frame display: YES animate: whetherYouWantAnimation];
    

    Note that window coordinates are flipped from what you might be used to. The origin point of a rectangle is at its bottom left in Quartz/Cocoa on OS X. To ensure the origin point remains the same:

    NSRect frame = [window frame];
    frame.origin.y -= frame.size.height; // remove the old height
    frame.origin.y += theSizeYouWant.height; // add the new height
    frame.size = theSizeYouWant;
    // continue as before
    
    0 讨论(0)
  • 2021-02-01 20:04

    Swift version

    var frame = self.view.window?.frame
    frame?.size = NSSize(width: 400, height:200)
    self.view.window?.setFrame(frame!, display: true)
    
    0 讨论(0)
  • 2021-02-01 20:07

    It is actually seems that +/- need to be reversed to keep window from moving on the screen:

    NSRect frame = [window frame];
    frame.origin.y += frame.size.height; // origin.y is top Y coordinate now
    frame.origin.y -= theSizeYouWant.height; // new Y coordinate for the origin
    frame.size = theSizeYouWant;
    
    0 讨论(0)
  • 2021-02-01 20:13

    Usually I want to resize the window based on the size of the content (not including the title bar):

    var rect = window.contentRect(forFrameRect: window.frame)
    rect.size = myKnownContentSize
    let frame = window.frameRect(forContentRect: rect)
    window.setFrame(frame, display: true, animate: true)
    
    0 讨论(0)
  • 2021-02-01 20:15

    my two cents for swift 4.x 7 OSX:

    a) do not call on viewDidLoad b) go on main queue... b) wait some time... so for example use:

    private final func setSize(){
        if let w = self.view.window{
            var frame = w.frame
            frame.size = NSSize(width: 400, height: 800)
            w.setFrame(frame, display: true, animate: true)
    
        }
    }
    
    0 讨论(0)
  • 2021-02-01 20:20

    Use setFrame:display:animate:

    [window setFrame:NSMakeRect(0.f, 0.f, 200.f, 200.f) display:YES animate:YES];
    
    0 讨论(0)
提交回复
热议问题