Electron在macOS下设置fullscreen为false无法禁用全屏按钮问题
我之前在macOS上也碰到过类似的Electron窗口布局异常情况,结合你的代码和描述来看,大概率是resizable: false和titleBarStyle: 'hiddenInset'的组合与fullscreen参数产生了冲突,导致窗口的位置计算出现偏差。下面是几个能解决问题的具体方案:
1. 强制窗口居中并显式禁用全屏功能
在窗口配置里添加center: true强制窗口居中,同时通过setFullScreenable(false)方法显式禁用全屏按钮(这比仅设置fullscreen: false在macOS上的效果更可靠):
mainWindow = new BrowserWindow({ height: 600, width: 600, title: 'Registar', titleBarStyle: 'hiddenInset', show: false, resizable: false, fullscreen: false, center: true // 确保窗口初始位置居中显示 }); // 显式禁用macOS上的全屏按钮 mainWindow.setFullScreenable(false); mainWindow.on('ready-to-show', () => { mainWindow.show(); });
2. 排查是否有其他代码干扰窗口状态
检查你的项目中是否有其他地方(比如ready-to-show事件回调、渲染进程的IPC调用)修改了窗口的位置或全屏状态,这类代码可能会覆盖你初始的配置参数,导致异常行为。
3. 用固定宽高替代resizable:false验证冲突
如果上面的方案没解决问题,可以先把resizable: false注释掉,运行项目看窗口是否能正常显示且全屏按钮被禁用。如果恢复正常,说明确实是这个参数和其他配置的冲突,这时可以尝试用minWidth/maxWidth、minHeight/maxHeight代替resizable: false,达到固定窗口大小的目的:
mainWindow = new BrowserWindow({ height: 600, width: 600, title: 'Registar', titleBarStyle: 'hiddenInset', show: false, fullscreen: false, center: true, minWidth: 600, maxWidth: 600, minHeight: 600, maxHeight: 600 }); mainWindow.setFullScreenable(false);
补充说明
macOS上的窗口标题栏和全屏逻辑比较特殊,titleBarStyle: 'hiddenInset'会改变窗口的布局边界,加上不可调整大小的限制,Electron的窗口管理器可能会错误计算窗口的初始位置。显式设置center: true和setFullScreenable(false)能绕过这个计算偏差,同时解决全屏按钮未禁用的问题。
内容的提问来源于stack exchange,提问作者Lachlan

