swiftui - SwiftUI:如果出现 ActionSheet,WebView 会重新加载
问题描述
我的 UI 上有一个 WebView,我只在实例化期间加载。但是,如果我提供一个操作表,它会再次加载它的内容。知道为什么吗?
struct DetailView: View {
let url: URL
private let NC = NotificationCenter.default
@State private var showingSheet = false
@Environment(\.presentationMode) private var presentationMode
var webView: WebView
init(url: URL){
self.url = url
webView = WebView(url: url)
}
var body: some View {
ZStack{
ShakableViewRepresentable().allowsHitTesting(false).onAppear(){
self.NC.addObserver(forName: Constants.shakeNotification, object: nil, queue: nil, using: self.shakeDetected)
}
webView
.padding( .bottom, -40.0)
.padding(.top , -45.0)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
.edgesIgnoringSafeArea(.all)
.actionSheet(isPresented: $showingSheet) {
ActionSheet(title: Text("What do you want to do?"), message: Text("There's only one choice..."), buttons: [.default(Text("Restart")), .default(Text("Exit"), action: {
self.presentationMode.wrappedValue.dismiss()
}), .cancel()])
}
}
.hideNavigationAndStatusBar()
}
func shakeDetected(_ notification: Notification) {
showingSheet = true
}
}
一些注意事项:使用 ShakableViewRepresentable 我检测到摇晃手势。如果检测到这一点,我会出示操作表。hideNavigationAndStatusBar() 执行它所谓的操作。
编辑:这是我的 WebView:
struct WebView: UIViewRepresentable{
var url: URL
func makeUIView(context: UIViewRepresentableContext<WebView>) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
let request = URLRequest(url: url)
uiView.load(request)
}
}
解决方案
推荐阅读
- python - 将dict添加到for循环中的列表
- python-3.x - Python 3.6 - 将“YYYY-MM-DD”字符串作为日期时间数据类型分配给变量?
- python - 尝试在 PyCharm 2018.1.4 上安装 win32com
- opengl - 创建多个帧缓冲区
- javascript - npx 是否查找全局安装的软件包?
- css - 需要一些带有边框图像渐变的 CSS 技巧
- python - 在硒中如何访问警告窗口以获取未找到的信息?
- docker - 将 Docker 命令添加到我的 Docker 容器中
- javascript - Javascript将onclick事件分配给未分配正确值的多个图像
- java - Java 启动和停止线程