Macos 根据contentView的新大小调整NSWindow的大小

Macos 根据contentView的新大小调整NSWindow的大小,macos,cocoa,nswindow,Macos,Cocoa,Nswindow,鉴于contentView的新大小,如何调整NSWindow的大小- - (void) resizeWindowWithContentSize:(NSSize)contentSize animated:(BOOL)animated { CGFloat titleBarHeight = self.window.frame.size.height - ((NSView*)self.window.contentView).frame.size.height; CGSize window

鉴于
contentView
的新大小,如何调整
NSWindow
的大小-

- (void) resizeWindowWithContentSize:(NSSize)contentSize animated:(BOOL)animated {
    CGFloat titleBarHeight = self.window.frame.size.height - ((NSView*)self.window.contentView).frame.size.height;
    CGSize windowSize = CGSizeMake(contentSize.width, contentSize.height + titleBarHeight);

    // Optional: keep it centered
    float originX = self.window.frame.origin.x + (self.window.frame.size.width - windowSize.width) / 2;
    float originY = self.window.frame.origin.y + (self.window.frame.size.height - windowSize.height) / 2;
    NSRect windowFrame = CGRectMake(originX, originY, windowSize.width, windowSize.height);

    [self.window setFrame:windowFrame display:YES animate:animated];
}
[window setContentSize:newContentSize]
还有一些方法可以在窗口大小和内容大小之间进行转换:

  • -(NSRect)contentRectForFrameRect:(NSRect)windowFrame
  • -(NSRect)frameRectForContentRect:(NSRect)windowContent