【Bug】cocos creator 3.3.0 Bug: iOS真机上 WebView组件显示异常

  • Creator 版本: 3.3.0

  • 目标平台: iOS真机(ip8 plus测试)

  • 重现方式:任意页面添加webview组件, 设置widget组件,距离四边边距为0。浏览器和iOS模拟器显示正常,真机上无法全屏,右侧和下侧留白。
    同样的设置,2.4.5版也没有问题。

  • 之前哪个版本是正常的: 2.4.5

  • 手机型号: ip8 plus

  • 编辑器操作系统: macOS 11

  • 重现概率: 必现

1年多了,最新的3.6.2还是这个问题,同样的配置,h5、android没问题,iOS有问题…

您好,这个问题有解决吗?

这个问题我们会验证一下,感谢反馈

一张图帮你看懂 iPhone 6 Plus 屏幕分辨率

2.x获取的是渲染分辨率,3.x获取的是实际分辨率,只有在6sp真机上才会出现,当iphone设置放大模式的时候也会异常

目前解决了,下面是修改的代码

// cocos-engine/native/cocos/ui/webview/WebViewImpl-ios.mm v3.6.3
- (void)setFrameWithX:(float)x y:(float)y width:(float)width height:(float)height {
    if (!self.uiWebView) {
        [self setupWebView];
    }
    //1、得到当前屏幕的尺寸:
    CGRect rect_screen = [[UIScreen mainScreen] bounds];
    CGSize size_screen = rect_screen.size;

    //2、获得scale:iPhone5和iPhone6是2,iPhone6Plus是3
    CGFloat scale_screen = [UIScreen mainScreen].scale;
    NSLog(@"scale_screen:%.f", scale_screen);
    
    CGRect physics_screen = [[UIScreen mainScreen] nativeBounds];
    CGSize physics_size_screen = physics_screen.size;

    //3.获取当前屏幕的分辨率
    CGFloat widthResolution = size_screen.width * scale_screen;
    CGFloat heightResolution = size_screen.height * scale_screen;
    
    CGFloat physics_scale = widthResolution/physics_size_screen.width;
    
    CGRect newFrame = CGRectMake(x, y, width*physics_scale, height*physics_scale);
    if (!CGRectEqualToRect(self.uiWebView.frame, newFrame)) {
        self.uiWebView.frame = CGRectMake(x, y, width*physics_scale, height*physics_scale);
    }
}

1赞