SwiftUI UIViewRepresentable 不缩放

问题描述

我在 SwiftUI 应用程序中创建了一个 WKWebView 作为 UIViewRepresentable 与 SwiftUI life 循环。它适用于内容。但是,当我在 iPad 横向启动应用程序并旋转时 肖像视图的右侧被截断。我试图扩大 基于其他代码的 webview,它(正确)检测到纵向或横向,但是这个 不起作用。奇怪的是,如果我从 iPad 纵向开始,则视图在两者中都是完整的 方向没有缩放修改

我查看了 SO 61832221 和 https://developer.apple.com/forums/thread/130878 其中包括但没有一个概念对我有用。

这是网页视图:

struct MyWebView: UIViewRepresentable {
    typealias UIViewType = WKWebView
    let url: URL?

    func makeUIView(context: Context) -> WKWebView {
        let prefs = WKWebpagePreferences()
        prefs.allowsContentJavaScript = true
        let config = WKWebViewConfiguration()
        config.defaultWebpagePreferences = prefs

        return WKWebView(frame: .zero,configuration: config)
    }

    func updateUIView(_ uiView: WKWebView,context: Context) {
        guard let myURL = url else { return }
        let request = URLRequest(url: myURL)
        uiView.load(request)
    }
}//struct

和实现:

struct USNetGenerationByMonthView: View,SizeClassadjustable {

    @Environment(\.verticalSizeClass) var _verticalSizeClass
    @Environment(\.horizontalSizeClass) var _horizontalSizeClass
    var verticalSizeClass: UserInterfaceSizeClass? { _verticalSizeClass }
    var horizontalSizeClass: UserInterfaceSizeClass? { _horizontalSizeClass }

    var body: some View {
        NavigationView {
            GeometryReader { geo in
                vstack {
                    MyWebView(url: URL(string: "https://www.catalpa.com/usnetgeneration"))
                        .navigationTitle("US Net Generation by Month")
                        //.scaleEffect(isPadPortrait ? 0.8 : 1.0)
                    Text("Tap a series for detail")
                        .padding(.bottom,50)
                
                    //for testing - hide this
                    HStack {
                        Text(isPadPortrait ? "Portrait" : "Landscape")
                        Text("Width is \(geo.size.width)")
                    }//.hidden()
                }
            }
        }.navigationViewStyle(StackNavigationViewStyle())
    }//body
}//struct

作为参考,这是确定方向的逻辑。

protocol SizeClassadjustable {
    var verticalSizeClass: UserInterfaceSizeClass? { get }
    var horizontalSizeClass: UserInterfaceSizeClass? { get }
}

extension SizeClassadjustable {
    var isPad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }
    var isPadLandscape: Bool {
        isPad && (UIScreen.main.bounds.height < UIScreen.main.bounds.width)
    }
    var isPadPortrait: Bool {
        isPad && (UIScreen.main.bounds.height > UIScreen.main.bounds.width)
    }
    var isPadOrLandscapeMax: Bool {
        horizontalSizeClass == .regular
    }
    var isLandscapeMax: Bool {
        horizontalSizeClass == .regular && verticalSizeClass == .compact
    }
    var isLandscape: Bool {
        verticalSizeClass == .compact
    }
    var isPortrait: Bool {
        verticalSizeClass == .regular && horizontalSizeClass == .compact
    }
}//extension

任何指导将不胜感激。 Xcode 12.5,iOS 14.5

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)