diff --git a/ylgamehall/Source/WebView/SubGameViewController.swift b/ylgamehall/Source/WebView/SubGameViewController.swift index 55a4ce7..77f5feb 100644 --- a/ylgamehall/Source/WebView/SubGameViewController.swift +++ b/ylgamehall/Source/WebView/SubGameViewController.swift @@ -2,7 +2,7 @@ // SubGameViewController.swift // ylgamehall // -// 子游戏 H5 承载容器:BridgedWebView + Splash + 16:9 letterbox + boot pipeline。 +// 子游戏 H5 承载容器:BridgedWebView 全屏铺满 + Splash + boot pipeline。 // 与 WebContainerViewController(大厅)共享同款 BridgedWebView + SplashOverlay 样式, // 但 boot 流程更短(不拉远端配置、不做 IPA 升级、不做 lobby zip 升级),仅: // 1) 确保子游戏 H5 已就绪(commit B: SubGameDownloader.ensureReady) @@ -122,27 +122,18 @@ public final class SubGameViewController: UIViewController { public override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { .landscapeRight } public override var prefersStatusBarHidden: Bool { false } - // MARK: - 16:9 letterbox(与大厅同款,未来可抽 LetterboxLayout 复用) + // MARK: - WebView 全屏布局(与大厅同款,等价 daoqi msext gameController.m + // 全屏 WKWebView 路径) private func setupBridgedWebView() { bridgedWebView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bridgedWebView) - let aspect = bridgedWebView.widthAnchor.constraint( - equalTo: bridgedWebView.heightAnchor, - multiplier: 16.0 / 9.0 - ) - let widthMax = bridgedWebView.widthAnchor.constraint(lessThanOrEqualTo: view.widthAnchor) - let heightMax = bridgedWebView.heightAnchor.constraint(lessThanOrEqualTo: view.heightAnchor) - let widthFill = bridgedWebView.widthAnchor.constraint(equalTo: view.widthAnchor) - let heightFill = bridgedWebView.heightAnchor.constraint(equalTo: view.heightAnchor) - widthFill.priority = .defaultLow - heightFill.priority = .defaultLow - NSLayoutConstraint.activate([ - bridgedWebView.centerXAnchor.constraint(equalTo: view.centerXAnchor), - bridgedWebView.centerYAnchor.constraint(equalTo: view.centerYAnchor), - aspect, widthMax, heightMax, widthFill, heightFill + bridgedWebView.topAnchor.constraint(equalTo: view.topAnchor), + bridgedWebView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + bridgedWebView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + bridgedWebView.trailingAnchor.constraint(equalTo: view.trailingAnchor) ]) } diff --git a/ylgamehall/Source/WebView/WebContainerViewController.swift b/ylgamehall/Source/WebView/WebContainerViewController.swift index 41f4616..c205790 100644 --- a/ylgamehall/Source/WebView/WebContainerViewController.swift +++ b/ylgamehall/Source/WebView/WebContainerViewController.swift @@ -2,7 +2,7 @@ // WebContainerViewController.swift // ylgamehall // -// H5 大厅承载容器:BridgedWebView 嵌入 + 16:9 letterbox + Splash 覆盖层 +// H5 大厅承载容器:BridgedWebView 全屏铺满 + Splash 覆盖层 // + 启动流水线(ensureReady → fetch → resolve → upgrade → loadFileURL)。 // 详见 docs/H5-Native-Implementation-Design.md §6.3.5。 // @@ -116,37 +116,24 @@ public final class WebContainerViewController: UIViewController { public override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { .landscapeRight } public override var prefersStatusBarHidden: Bool { false } - // MARK: - 16:9 letterbox 布局 + // MARK: - WebView 全屏布局(与 daoqi msext 同款) // - // H5 设计分辨率 1280×720(16:9)。设备比例与 16:9 不匹配时用黑边补齐: - // - 比 16:9 宽(如现代 iPhone 横屏 2.16:1)→ 左右黑边 - // - 比 16:9 窄(如 iPad 4:3)→ 上下黑边 + // 原项目 NewRootVC.m:256 用 `CGRectMake(0, 0, DEVW, DEVH)` 直接全屏铺满 WKWebView, + // 没有任何 letterbox。H5 viewport 自身处理设计稿(1280×720)→ 设备实际宽高的伸缩。 // - // 约束策略: - // required:aspect = 16:9,width ≤ view.width,height ≤ view.height - // low: width = view.width,height = view.height(尽量撑满) - // 居中: centerX / centerY - // Auto Layout 会自动选择"短边贴边、长边居中"的解。 + // 早期 ylgamehall 设计文档(§6.3.5)曾用 16:9 letterbox(左右/上下补黑边),但实测 + // 现代 iPhone 横屏比例约 19.5:9(比 16:9 更宽)→ 左右黑边过大体验差,且偏离 msext + // 上线多年的视觉习惯。回到与原项目一致的全屏铺满路径。 private func setupBridgedWebView() { bridgedWebView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bridgedWebView) - let aspect = bridgedWebView.widthAnchor.constraint( - equalTo: bridgedWebView.heightAnchor, - multiplier: 16.0 / 9.0 - ) - let widthMax = bridgedWebView.widthAnchor.constraint(lessThanOrEqualTo: view.widthAnchor) - let heightMax = bridgedWebView.heightAnchor.constraint(lessThanOrEqualTo: view.heightAnchor) - let widthFill = bridgedWebView.widthAnchor.constraint(equalTo: view.widthAnchor) - let heightFill = bridgedWebView.heightAnchor.constraint(equalTo: view.heightAnchor) - widthFill.priority = .defaultLow - heightFill.priority = .defaultLow - NSLayoutConstraint.activate([ - bridgedWebView.centerXAnchor.constraint(equalTo: view.centerXAnchor), - bridgedWebView.centerYAnchor.constraint(equalTo: view.centerYAnchor), - aspect, widthMax, heightMax, widthFill, heightFill + bridgedWebView.topAnchor.constraint(equalTo: view.topAnchor), + bridgedWebView.bottomAnchor.constraint(equalTo: view.bottomAnchor), + bridgedWebView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + bridgedWebView.trailingAnchor.constraint(equalTo: view.trailingAnchor) ]) }