如何在MacOS中实现主窗口缩放时保持宽高比?
macOS 窗口拖拽调整时保持宽高比的实现方法
一、代码实现方式
你找到的setAspectRatio代码是有效的,关键要放在正确的位置:
1. 放在NSWindowController子类中
如果用Nib/Storyboard创建窗口,先确保窗口关联了NSWindowController子类:
- 打开Nib/Storyboard,选中窗口控制器对象
- 在Identity Inspector中设置自定义子类(比如
MainWindowController) - 在子类中实现
windowDidLoad或awakeFromNib方法:
#import "MainWindowController.h" @implementation MainWindowController - (void)windowDidLoad { [super windowDidLoad]; // 以窗口初始尺寸为基准设置宽高比 [self.window setAspectRatio:self.window.frame.size]; } // 也可以用awakeFromNib(Nib加载完成时触发) //- (void)awakeFromNib { // [self.window setAspectRatio:self.window.frame.size]; //} @end
2. 应用启动时全局设置
如果要在应用启动后立即设置,可监听macOS的应用启动通知(注意和iOS通知名称不同):
@interface WindowAspectRatioSetup : NSObject @end static WindowAspectRatioSetup *_instance; @implementation WindowAspectRatioSetup + (void)load { _instance = [[WindowAspectRatioSetup alloc] init]; [[NSNotificationCenter defaultCenter] addObserver:_instance selector:@selector(applicationDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil]; } - (void)applicationDidFinishLaunching:(NSNotification *)notification { NSWindow *mainWindow = [[NSApplication sharedApplication] mainWindow]; [mainWindow setAspectRatio:mainWindow.frame.size]; } @end
二、Xcode可视化设置(无需写代码)
直接在Interface Builder中配置即可:
- 打开包含窗口的Nib/Storyboard文件
- 选中窗口对象(NSWindow)
- 切换到Attributes Inspector(右侧面板第4个图标)
- 在Resize区域,勾选Maintain Aspect Ratio选项
设置完成后,窗口拖拽调整时会自动保持初始宽高比。
三、注意事项
- macOS窗口用
NSWindow类,和iOS的UIWindow不通用,所以你之前的iOS代码无法生效 - 若需动态修改宽高比,可随时调用
setAspectRatio:传入新尺寸(比如NSSizeMake(16,9)设置16:9比例)
内容的提问来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

