问题描述
我在 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 (将#修改为@)