From 57023d204d1a7b8613647b3533b0d03fcb5e8c37 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 29 Sep 2020 15:28:33 -0400 Subject: [PATCH] iOS: Go back to full SwiftUI Embedding a UIHostingController inside a UIScrollView prevents LazyVStack from working, causing very bad performance on some pages --- Gemini-iOS/ContentView.swift | 6 ------ Gemini-iOS/SceneDelegate.swift | 6 +++--- Gemini-iOS/ToolBar.swift | 2 +- Gemini.xcodeproj/project.pbxproj | 4 ++++ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Gemini-iOS/ContentView.swift b/Gemini-iOS/ContentView.swift index 107344b..890ed89 100644 --- a/Gemini-iOS/ContentView.swift +++ b/Gemini-iOS/ContentView.swift @@ -8,12 +8,9 @@ import SwiftUI import BrowserCore -// This is not currently used as SwiftUI's ScrollView has no mechanism for detecting when it stops deceleraing, -// which is necessary to preven tthe bars from being left in a partially visible state. struct ContentView: View { @ObservedObject private var navigator: NavigationManager @State private var urlFieldContents: String - @State private var showPreferencesSheet = false private let shareCurrentURL: () -> Void @State private var prevScrollOffset: CGFloat = 0 @State private var scrollOffset: CGFloat = 0 { @@ -88,9 +85,6 @@ struct ContentView: View { .onReceive(navigator.$currentURL, perform: { (new) in urlFieldContents = new.absoluteString }) - .sheet(isPresented: $showPreferencesSheet, content: { - PreferencesView(presented: $showPreferencesSheet) - }) } private func tweakAppearance() { diff --git a/Gemini-iOS/SceneDelegate.swift b/Gemini-iOS/SceneDelegate.swift index 850a907..8b9e424 100644 --- a/Gemini-iOS/SceneDelegate.swift +++ b/Gemini-iOS/SceneDelegate.swift @@ -37,13 +37,13 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { navigationManager.delegate = self // Create the SwiftUI view that provides the window contents. -// let contentView = ContentView(navigator: navigationManager, shareCurrentURL: self.shareCurrentURL) + let contentView = ContentView(navigator: navigationManager, shareCurrentURL: self.shareCurrentURL) // Use a UIHostingController as window root view controller. if let windowScene = scene as? UIWindowScene { let window = UIWindow(windowScene: windowScene) -// window.rootViewController = UIHostingController(rootView: contentView) - window.rootViewController = BrowserViewController(navigator: navigationManager) + window.rootViewController = UIHostingController(rootView: contentView) +// window.rootViewController = BrowserViewController(navigator: navigationManager) self.window = window window.makeKeyAndVisible() } diff --git a/Gemini-iOS/ToolBar.swift b/Gemini-iOS/ToolBar.swift index 0315aca..b3a38a7 100644 --- a/Gemini-iOS/ToolBar.swift +++ b/Gemini-iOS/ToolBar.swift @@ -67,8 +67,8 @@ struct ToolBar: View { Spacer() } - Spacer(minLength: 4) } + .padding(.bottom, 4) .background(Color(UIColor.systemBackground).edgesIgnoringSafeArea(.bottom)) .sheet(isPresented: $showPreferencesSheet, content: { PreferencesView(presented: $showPreferencesSheet) diff --git a/Gemini.xcodeproj/project.pbxproj b/Gemini.xcodeproj/project.pbxproj index c25ebaf..60d55fa 100644 --- a/Gemini.xcodeproj/project.pbxproj +++ b/Gemini.xcodeproj/project.pbxproj @@ -46,6 +46,7 @@ D691A6A0252242FC00348C4B /* ToolBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = D691A69F252242FC00348C4B /* ToolBar.swift */; }; D69F00AC24BE9DD300E37622 /* GeminiDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = D69F00AB24BE9DD300E37622 /* GeminiDataTask.swift */; }; D69F00AE24BEA29100E37622 /* GeminiResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D69F00AD24BEA29100E37622 /* GeminiResponse.swift */; }; + D6DA5783252396030048B65A /* View+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6DA5782252396030048B65A /* View+Extensions.swift */; }; D6E1529824BFAAA400FDF9D3 /* BrowserWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E1529624BFAAA400FDF9D3 /* BrowserWindowController.swift */; }; D6E1529924BFAAA400FDF9D3 /* BrowserWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D6E1529724BFAAA400FDF9D3 /* BrowserWindowController.xib */; }; D6E1529B24BFAEC700FDF9D3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = D6E1529A24BFAEC700FDF9D3 /* MainMenu.xib */; }; @@ -304,6 +305,7 @@ D69F00AB24BE9DD300E37622 /* GeminiDataTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeminiDataTask.swift; sourceTree = ""; }; D69F00AD24BEA29100E37622 /* GeminiResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeminiResponse.swift; sourceTree = ""; }; D69F00AF24BEA84D00E37622 /* NavigationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationManager.swift; sourceTree = ""; }; + D6DA5782252396030048B65A /* View+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Extensions.swift"; sourceTree = ""; }; D6E1529624BFAAA400FDF9D3 /* BrowserWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserWindowController.swift; sourceTree = ""; }; D6E1529724BFAAA400FDF9D3 /* BrowserWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BrowserWindowController.xib; sourceTree = ""; }; D6E1529A24BFAEC700FDF9D3 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; @@ -526,6 +528,7 @@ D62664ED24BC0BCE00DF9B88 /* MaybeLazyVStack.swift */, D62664EB24BC0B4D00DF9B88 /* DocumentView.swift */, D664673724BD086F00B0B741 /* RenderingBlockView.swift */, + D6DA5782252396030048B65A /* View+Extensions.swift */, ); path = GeminiRenderer; sourceTree = ""; @@ -1042,6 +1045,7 @@ D664673A24BD0B8E00B0B741 /* Fonts.swift in Sources */, D62664EE24BC0BCE00DF9B88 /* MaybeLazyVStack.swift in Sources */, D62664EC24BC0B4D00DF9B88 /* DocumentView.swift in Sources */, + D6DA5783252396030048B65A /* View+Extensions.swift in Sources */, D664673824BD086F00B0B741 /* RenderingBlockView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0;