引擎组大佬们,2.3在Safari强制使用window.innerWidth,不科学吧?


2.2对Cocos2dGameContainer包裹一层Box,只需要设置Box的尺寸,Container和GameCanvas都能自适应,很符合HTML习惯,跟随父节点。



2.3下不能自适应,始终用屏幕的尺寸。强行设置canvas样式/setAttribute又会导致比例不对、输入框表现bug、画面尺寸跟实际触摸尺寸不符等。



需求实现原理,无论safari什么版本什么状态,只要计算好Box的尺寸比例,游戏画布都能跟随。空隙部分能用Html设置背景。


`switch (__BrowserGetter.adaptationType) {
    case cc.sys.BROWSER_TYPE_SAFARI:
        __BrowserGetter.meta["minimal-ui"] = "true";
        __BrowserGetter.availWidth = cc.sys.isMobile ? function (frame){
            // bug fix for navigation bar on Safari
            return window.innerWidth;
        } : function (frame) {
            return frame.clientWidth;
        }
        __BrowserGetter.availHeight = cc.sys.isMobile ? function (frame){
            // bug fix for navigation bar on Safari
            return window.innerHeight;
        } : function (frame) {
            return frame.clientHeight;
        }
        break;
    case cc.sys.BROWSER_TYPE_SOUGOU:
    case cc.sys.BROWSER_TYPE_UC:
        __BrowserGetter.meta["minimal-ui"] = "true";
        __BrowserGetter.availWidth = function(frame){
            return frame.clientWidth;
        };
        __BrowserGetter.availHeight = function(frame){
            return frame.clientHeight;
        };
        break;
}`

CCView.js的代码。移动设备Safari都使用window.innerWidth不好吧? 不管是用Html处理黑边还是自定义尺寸,都没法做了呀。既然是web,就按web的规则来更合理吧:anguished:

这里是为了解决导航栏的问题,你会遇到导航栏的问题吗?或许你有其它比较好的办法解决呢?

如果你说的是这个帖的bug,我的iOS13.3.1+ iPhone6/8地址栏都很正常。有回帖说是官方的bug已经解决了,这“官方”是指苹果吧?你们可以验证下

我没重现所以没法测试,猜想两个方法,一是只改body,其他层自适应,这样就能扩展外壳div了;二是只改height。如果改了width,只勾选Fix Width的情况下,必然会被裁掉上下。我没法验证,仅供讨论。

好的,那你暂时先自定义 engine 修改一下,我们这边在调整一下

当sofri浏览器 在iphonex以上 横屏会出现,点击上面出现 地址栏遮挡 页面,应该是在 地址栏出现之后没有把window.pageYOffset 设置成0造成,我暂时在这里处理一下就好了,

还有关于按钮位置有时候会偏下,这个问题,

这个地方已经计算好了,adjustedTop,而在执行点击的时候执行到这个地方,adjustedTop是计算好的,并且有可能是0,而在这个地方,就会使用top这个值,造成点击位置偏移

safri浏览器在iphonx以上,横屏无法全屏,确实是使用了 window.innerWidth,造成的,window.innerWidth确实没有达到屏幕的宽度,不知道这个适配方案是不是可以修改下

这个地方确实应该判断 adjustedTop 是 undefined 才使用 top 这个值

请问是 iOS 13 以下的系统版本才会出现这个问题吗

不是,ios13以上,手机不锁定旋转,横屏,safri打开页面,是没有地址栏的,点击最上方,地址栏就会弹出来,就会遮挡页面,页面没有自动下移,但是页面的高度确实发生了变化,下面空出来一部分,就是window.pageYOffset在地址栏弹出时没有跟随着变化

我们这边暂时没有复现问题,不过之前有遇到过类似的情况,
iOS 上的浏览器需要延迟一帧处理 resize 事件的回调。你可以帮忙确认下这个修复是否解决你的问题吗