本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

本文中描述的是electronwin下面的一个现存bugelectron官方宣布说已经fix。但是,在苏南大叔的测试下,截至到发稿,最新版的4.053.14都仍然存在着本文所描述的问题。所以,严重怀疑electron官方解决bug的诚意。

苏南大叔:win环境,electron如何解决由resizable:false引发的高度变化bug - electron-browserwindows-size
win环境,electron如何解决由resizable:false引发的高度变化bug(图3-1)

本文测试环境:win10electron@3.14

高度不断减小的bug

本文中的bug发生,是有特定环境的。win10环境,设置了resizablefalse,并且存在顶部菜单的情况下,就会触发本文描述的bugbug的现象是:最小化窗体后,再点击出来后,高度就会减小十几像素,而且会不断减小。每restore一次,窗体高度就减小一次...

注:从最小化或者最大化还原为正常窗体的事件,英文名为restore

苏南大叔:win环境,electron如何解决由resizable:false引发的高度变化bug - resizable-false-bug
win环境,electron如何解决由resizable:false引发的高度变化bug(图3-2)

触发条件再次总结:

  • win环境
  • resizable:false
  • 存在系统菜单(默认情况下都有顶部系统菜单的,比如debug环境下)

经过测试,这个变化的高度,很有可能是顶部菜单的高度。并且,bug触发的前提是禁止窗体调整大小。关于这个问题,相关的issue地址如下:

issue虽然已经被标记为fix,但是在苏南大叔的测试中,此bug仍然可以在最新版的electron中复现...从官方的态度上来看,可以看到似乎是很不在意这事啊....

苏南大叔:win环境,electron如何解决由resizable:false引发的高度变化bug - resizable-false-bug-issue
win环境,electron如何解决由resizable:false引发的高度变化bug(图3-3)

临时解决方案

本方案也是苏南大叔独家推出的,如果您觉得好用,那么请打赏点赞转发,谢谢。

因为组合的重要因素就是resizable:falseapplicationMenu。代码监控点,苏南大叔选择的是:on('restore')

思路如下:如果是win系统/resizable:false/有菜单,那么在restore的时候,将主动多设置出菜单的高度,经验值是20px

窗体目标宽度300,高度580。演示代码如下:

newsn.net:这里是【评论】可见内容

重点代码:
判断是否为win:

if(process.platform=="win32"){}

设置/获取窗体大小:

mainWindow.setSize(200,100);
mainWindow.getSize();        //[200,100]

隐藏系统菜单:

import { app,BrowserWindow,Menu } from 'electron';
Menu.setApplicationMenu(null);

判断是否存在菜单:

import { app,BrowserWindow,Menu } from 'electron';
var mm = Menu.getApplicationMenu();
if(!!mm){
  //有菜单
}
else{
  //没有菜单
}

相关链接

总结

electron官方正式解决这个问题之前,大家就可以用本文的思路临时解决问题了。本文的方案应该不是最佳方案,欢迎大家演绎此代码并完善。当然最好的办法,就是electron官方真正的解决这个问题,不过也许只能慢慢等待了。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。