From a0056af8b11955c9a7306e3b5669a9929363831a Mon Sep 17 00:00:00 2001 From: James Magahern Date: Mon, 29 Jul 2024 19:21:51 -0700 Subject: [PATCH] Update for iOS 17. --- .../BrowserViewController+Keyboard.swift | 22 ++--- ...BrowserViewController+WebKitDelegate.swift | 26 ++--- App/Browser View/BrowserViewController.swift | 98 +++++++++---------- App/Common UI/GradientView.swift | 13 +-- App/Common UI/ReliefButton.swift | 8 +- .../BrowserSceneDelegate.swift | 6 +- .../ToolbarViewController.swift | 19 ++-- SBrowser.xcodeproj/project.pbxproj | 6 +- 8 files changed, 97 insertions(+), 101 deletions(-) diff --git a/App/Browser View/BrowserViewController+Keyboard.swift b/App/Browser View/BrowserViewController+Keyboard.swift index f70cd18..c79810c 100644 --- a/App/Browser View/BrowserViewController+Keyboard.swift +++ b/App/Browser View/BrowserViewController+Keyboard.swift @@ -94,11 +94,11 @@ extension BrowserViewController: ShortcutResponder } func goBack(_ sender: Any?) { - tab.webView.goBack() + currentTab.webView.goBack() } func goForward(_ sender: Any?) { - tab.webView.goForward() + currentTab.webView.goForward() } func createTab(_ sender: Any?) { @@ -106,24 +106,24 @@ extension BrowserViewController: ShortcutResponder } func previousTab(_ sender: Any?) { - if let tabIndex = tabController.tabs.firstIndex(of: self.tab) { + if let tabIndex = tabController.tabs.firstIndex(of: self.currentTab) { if tabIndex - 1 >= 0 { - self.tab = tabController.tabs[tabIndex - 1] + self.currentTab = tabController.tabs[tabIndex - 1] } } } func nextTab(_ sender: Any?) { - if let tabIndex = tabController.tabs.firstIndex(of: self.tab) { + if let tabIndex = tabController.tabs.firstIndex(of: self.currentTab) { if tabIndex + 1 < tabController.tabs.count { - self.tab = tabController.tabs[tabIndex + 1] + self.currentTab = tabController.tabs[tabIndex + 1] } } } func closeTab(_ sender: Any?) { if tabController.tabs.count > 1 { - tabController.closeTab(self.tab) + tabController.closeTab(self.currentTab) } else { #if targetEnvironment(macCatalyst) if let originWindowScene = self.view.window?.windowScene { @@ -145,11 +145,11 @@ extension BrowserViewController: ShortcutResponder } override func increaseSize(_ sender: Any?) { - tab.webView._viewScale += 0.10 + currentTab.webView._viewScale += 0.10 } override func decreaseSize(_ sender: Any?) { - tab.webView._viewScale -= 0.10 + currentTab.webView._viewScale -= 0.10 } func showPreferences(_ sender: Any?) { @@ -171,8 +171,8 @@ extension BrowserViewController: ShortcutResponder func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) { guard let event else { return } - if tab.url == nil { - tab.beginLoadingURL(event.url) + if currentTab.url == nil { + currentTab.beginLoadingURL(event.url) } else { createNewTab(withURL: event.url) } diff --git a/App/Browser View/BrowserViewController+WebKitDelegate.swift b/App/Browser View/BrowserViewController+WebKitDelegate.swift index 6ef785a..6da0849 100644 --- a/App/Browser View/BrowserViewController+WebKitDelegate.swift +++ b/App/Browser View/BrowserViewController+WebKitDelegate.swift @@ -10,10 +10,10 @@ import WebKit extension BrowserViewController: WKNavigationDelegate, WKUIDelegate { func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { - tab.loadError = nil + currentTab.loadError = nil // Check to make sure we have connected to the web content process - if !tab.bridge.webContentProcessConnected { + if !currentTab.bridge.webContentProcessConnected { // This means we started loading a page but the web content process hasn't loaded, which means // scripts are not getting blocked. @@ -37,8 +37,8 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate } // Reset tracking this - tab.allowedScriptOrigins.removeAll() - tab.blockedScriptOrigins.removeAll() + currentTab.allowedScriptOrigins.removeAll() + currentTab.blockedScriptOrigins.removeAll() updateScriptBlockerButton() // Blur url bar if applicable @@ -48,7 +48,7 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate if let url = webView.url { // Start requesting favicon - tab.updateFaviconForURL(url) + currentTab.updateFaviconForURL(url) } } @@ -56,7 +56,7 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate // We got rugged!!!!!! Update the favicon again. if let url = webView.url { // Start requesting favicon - tab.updateFaviconForURL(url) + currentTab.updateFaviconForURL(url) } } @@ -90,7 +90,7 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate return } - var allowJavaScript = tab.javaScriptEnabled + var allowJavaScript = currentTab.javaScriptEnabled if !allowJavaScript, let host = navigationAction.request.url?.host { // Check origin policy allowJavaScript = policyManager.scriptPolicy(forOrigin: host).allowsEmbeddedJavaScript() @@ -101,7 +101,7 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate if let url = navigationAction.request.url, let redirectedURL = Settings.shared.redirectRule(for: url) { - tab.beginLoadingURL(redirectedURL) + currentTab.beginLoadingURL(redirectedURL) decisionHandler(.cancel, preferences) } else { decisionHandler(.allow, preferences) @@ -109,14 +109,14 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate } func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { - if webView == tab.webView { - tab.loadError = error + if webView == currentTab.webView { + currentTab.loadError = error } } func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { - if webView == tab.webView { - tab.loadError = error + if webView == currentTab.webView { + currentTab.loadError = error } } @@ -127,7 +127,7 @@ extension BrowserViewController: WKNavigationDelegate, WKUIDelegate let newTab = tabController.createNewTab(url: nil, webViewConfiguration: configuration) newTab.webView.load(navigationAction.request) - self.tab = newTab + self.currentTab = newTab return newTab.webView } diff --git a/App/Browser View/BrowserViewController.swift b/App/Browser View/BrowserViewController.swift index 0853a05..c2272fc 100644 --- a/App/Browser View/BrowserViewController.swift +++ b/App/Browser View/BrowserViewController.swift @@ -13,8 +13,8 @@ import UniformTypeIdentifiers class BrowserViewController: UIViewController { let browserView = BrowserView() - var tab: Tab { didSet { didChangeTab(tab) } } - var webView: WKWebView { tab.webView } + var currentTab: Tab { didSet { didChangeTab(currentTab) } } + var webView: WKWebView { currentTab.webView } internal let tabController = TabController() internal let tabBarViewController: TabBarViewController @@ -42,9 +42,9 @@ class BrowserViewController: UIViewController static let longPressWindowButtonToMakeNewTab: Bool = false internal var darkModeEnabled: Bool { - get { tab.bridge.darkModeEnabled } + get { currentTab.bridge.darkModeEnabled } set { - tab.bridge.darkModeEnabled = newValue + currentTab.bridge.darkModeEnabled = newValue toolbarController.darkModeEnabled = newValue } } @@ -60,7 +60,7 @@ class BrowserViewController: UIViewController internal var changingFocusToAutocompleteController = false init() { - self.tab = tabController.tabs.first! + self.currentTab = tabController.tabs.first! self.tabBarViewController = TabBarViewController(tabController: tabController) super.init(nibName: nil, bundle: nil) @@ -70,7 +70,7 @@ class BrowserViewController: UIViewController addChild(findOnPageController) addChild(tabBarViewController) - didChangeTab(tab) + didChangeTab(currentTab) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @@ -115,11 +115,11 @@ class BrowserViewController: UIViewController // Script button toolbarController.scriptControllerIconView.addAction(UIAction(handler: { [unowned self] action in let hostOrigin = self.webView.url?.host ?? "" - let loadedScripts = self.tab.allowedScriptOrigins.union(self.tab.blockedScriptOrigins) + let loadedScripts = currentTab.allowedScriptOrigins.union(currentTab.blockedScriptOrigins) let scriptViewController = ScriptPolicyViewController(policyManager: self.policyManager, hostOrigin: hostOrigin, loadedScripts: loadedScripts, - scriptsAllowedForTab: self.tab.javaScriptEnabled) + scriptsAllowedForTab: currentTab.javaScriptEnabled) scriptViewController.delegate = self let navController = UINavigationController(rootViewController: scriptViewController) @@ -141,7 +141,7 @@ class BrowserViewController: UIViewController tabPickerController.delegate = self tabPickerController.title = "Tabs" tabPickerController.tabBarItem.image = UIImage(systemName: "rectangle.on.rectangle") - tabPickerController.selectedTabIdentifier = self.tab.identifier + tabPickerController.selectedTabIdentifier = currentTab.identifier tabPickerController.tabObserver = tabController.$tabs .receive(on: RunLoop.main) .sink(receiveValue: { (newTabs: [Tab]) in @@ -207,7 +207,7 @@ class BrowserViewController: UIViewController // Error button toolbarController.urlBar.errorButton.addAction(UIAction(handler: { [unowned self] _ in - let alert = UIAlertController(title: "Error", message: self.tab.loadError?.localizedDescription, preferredStyle: .actionSheet) + let alert = UIAlertController(title: "Error", message: currentTab.loadError?.localizedDescription, preferredStyle: .actionSheet) alert.popoverPresentationController?.sourceView = self.toolbarController.urlBar.errorButton alert.addAction(UIAlertAction(title: "Reload", style: .destructive, handler: { _ in @@ -240,7 +240,7 @@ class BrowserViewController: UIViewController // Font size adjust toolbarController.urlBar.documentButton.addAction(UIAction(handler: { [unowned self] _ in - let documentControls = DocumentControlViewController(darkModeEnabled: tab.bridge.darkModeEnabled) + let documentControls = DocumentControlViewController(darkModeEnabled: currentTab.bridge.darkModeEnabled) documentControls.modalPresentationStyle = .popover documentControls.popoverPresentationController?.permittedArrowDirections = [ .down, .up ] documentControls.popoverPresentationController?.sourceView = toolbarController.urlBar.documentButton @@ -250,17 +250,17 @@ class BrowserViewController: UIViewController numberFormatter.numberStyle = .percent let label = documentControls.fontSizeAdjustView.labelView - label.text = numberFormatter.string(for: tab.webView._viewScale) + label.text = numberFormatter.string(for: currentTab.webView._viewScale) // Font size adjust documentControls.fontSizeAdjustView.decreaseSizeButton.addAction(UIAction(handler: { [unowned self] sender in self.decreaseSize(sender) - label.text = numberFormatter.string(for: tab.webView._viewScale) + label.text = numberFormatter.string(for: currentTab.webView._viewScale) }), for: .touchUpInside) documentControls.fontSizeAdjustView.increaseSizeButton.addAction(UIAction(handler: { [unowned self] sender in self.increaseSize(sender) - label.text = numberFormatter.string(for: tab.webView._viewScale) + label.text = numberFormatter.string(for: currentTab.webView._viewScale) }), for: .touchUpInside) // Find on page @@ -348,8 +348,8 @@ class BrowserViewController: UIViewController .sink(receiveValue: { [unowned self] (activeTab: Int) in if activeTab < tabController.tabs.count { let tab = tabController.tabs[activeTab] - if self.tab != tab { - self.tab = tab + if currentTab != tab { + currentTab = tab } } @@ -357,6 +357,11 @@ class BrowserViewController: UIViewController self.updateTabBarVisibility() }) + registerForTraitChanges([UITraitHorizontalSizeClass.self]) { [weak self] (traitEnvironment: Self, previousTraitCollection) in + guard let self else { return } + toolbarController.reconfigureButtons(for: traitCollection.horizontalSizeClass) + } + self.view = browserView } @@ -370,7 +375,7 @@ class BrowserViewController: UIViewController let shareableURL = ShareableURL( url: url, title: webView.title ?? url.absoluteString, - favicon: tab.favicon + favicon: currentTab.favicon ) let activityController = UIActivityViewController(activityItems: [ shareableURL ], applicationActivities: nil) @@ -444,21 +449,21 @@ class BrowserViewController: UIViewController } internal func showReaderWindow() { - tab.bridge.parseDocumentForReaderMode { string in + currentTab.bridge.parseDocumentForReaderMode { [currentTab] string in DispatchQueue.main.async { if self.traitCollection.userInterfaceIdiom == .phone { - let readableViewController = ReaderViewController(readableHTMLString: string, baseURL: self.tab.bridge.webView.url) - readableViewController.title = self.tab.bridge.webView.title - readableViewController.darkModeEnabled = self.tab.bridge.darkModeEnabled + let readableViewController = ReaderViewController(readableHTMLString: string, baseURL: currentTab.bridge.webView.url) + readableViewController.title = currentTab.bridge.webView.title + readableViewController.darkModeEnabled = currentTab.bridge.darkModeEnabled readableViewController.delegate = self let navigationController = UINavigationController(rootViewController: readableViewController) self.present(navigationController, animated: true, completion: nil) } else { let userActivity = NSUserActivity(activityType: SessionActivityType.ReaderWindow.rawValue) - userActivity.title = self.tab.title + userActivity.title = currentTab.title userActivity.userInfo = [ - ReaderUserActivityKeys.baseURL.rawValue : self.tab.bridge.webView.url ?? NSNull(), + ReaderUserActivityKeys.baseURL.rawValue : currentTab.bridge.webView.url ?? NSNull(), ReaderUserActivityKeys.htmlString.rawValue : string, ] let requestOptions = UIWindowScene.ActivationRequestOptions() @@ -471,8 +476,8 @@ class BrowserViewController: UIViewController internal func showHistoryWindow() { let historyViewController = HistoryBrowserViewController { [unowned self] url in - if tab.url == nil { - tab.beginLoadingURL(url) + if currentTab.url == nil { + currentTab.beginLoadingURL(url) } else { createNewTab(withURL: url) } @@ -503,7 +508,7 @@ class BrowserViewController: UIViewController } internal func updateLoadProgress(forWebView webView: WKWebView) { - if let loadError = tab.loadError { + if let loadError = currentTab.loadError { toolbarController.urlBar.loadProgress = .error(error: loadError) } else if webView.estimatedProgress == 1.0 { toolbarController.urlBar.loadProgress = .complete @@ -537,9 +542,9 @@ class BrowserViewController: UIViewController tabController.activeTabIndex = activeIndex } - tab.delegate = self + currentTab.delegate = self - let webView = tab.webView + let webView = currentTab.webView webView.allowsBackForwardNavigationGestures = true webView.navigationDelegate = self webView.uiDelegate = self @@ -584,7 +589,7 @@ class BrowserViewController: UIViewController updateScriptBlockerButton() // Enforce dark mode setting - tab.bridge.darkModeEnabled = toolbarController.darkModeEnabled + currentTab.bridge.darkModeEnabled = toolbarController.darkModeEnabled // Blur url bar, if applicable toolbarController.urlBar.textField.resignFirstResponder() @@ -613,17 +618,10 @@ class BrowserViewController: UIViewController super.viewWillAppear(animated) becomeFirstResponder() } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - // Not sure why this doesn't happen automatically... - toolbarController.traitCollectionDidChange(previousTraitCollection) - } - internal func updateScriptBlockerButton() { - var numBlockedScripts: Int = tab.blockedScriptOrigins.count - if tab.url != nil, tab.javaScriptEnabled == false { + var numBlockedScripts: Int = currentTab.blockedScriptOrigins.count + if currentTab.url != nil, currentTab.javaScriptEnabled == false { // Because the page is blocked too, notify. numBlockedScripts += 1 } @@ -634,7 +632,7 @@ class BrowserViewController: UIViewController } let iconView = toolbarController.scriptControllerIconView - iconView.shieldsDown = tab.javaScriptEnabled + iconView.shieldsDown = currentTab.javaScriptEnabled // iconView.setBlockedScriptsNumber(numBlockedScripts) if let policy = policy { @@ -649,7 +647,7 @@ class BrowserViewController: UIViewController let newTab = tabController.createNewTab(url: url) if !loadInBackground { - self.tab = newTab + currentTab = newTab if url == nil && traitCollection.userInterfaceIdiom == .mac { self.toolbarController.urlBar.textField.becomeFirstResponder() @@ -657,7 +655,7 @@ class BrowserViewController: UIViewController } else { // Send this message to get it to load NOW, instead of waiting for it to show up // in the view hierarchy. - tab.webView.didMoveToWindow() + currentTab.webView.didMoveToWindow() // Update tab bar now updateTabBarVisibility() @@ -678,12 +676,12 @@ extension BrowserViewController: UIPopoverPresentationControllerDelegate extension BrowserViewController: ScriptPolicyViewControllerDelegate { func didChangeScriptPolicy() { - tab.bridge.policyDataSourceDidChange() + currentTab.bridge.policyDataSourceDidChange() webView.reload() } func setScriptsEnabledForTab(_ enabled: Bool) { - tab.javaScriptEnabled = enabled + currentTab.javaScriptEnabled = enabled toolbarController.scriptControllerIconView.shieldsDown = enabled } } @@ -691,7 +689,7 @@ extension BrowserViewController: ScriptPolicyViewControllerDelegate extension BrowserViewController: AutocompleteViewControllerDelegate { func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem item: HistoryItem) { - tab.beginLoadingURL(item.url) + currentTab.beginLoadingURL(item.url) autocompleteViewController.view.isHidden = true } } @@ -706,7 +704,7 @@ extension BrowserViewController: TabDelegate extension BrowserViewController: TabPickerViewControllerDelegate { func tabPicker(_ picker: TabPickerViewController, createNewTabWithURL url: URL?) { - self.tab = tabController.createNewTab(url: url) + currentTab = tabController.createNewTab(url: url) picker.dismiss(animated: true) } @@ -725,7 +723,7 @@ extension BrowserViewController: TabPickerViewControllerDelegate guard let tab else { return } - self.tab = tab + currentTab = tab picker.dismiss(animated: true, completion: nil) } @@ -735,7 +733,7 @@ extension BrowserViewController: TabPickerViewControllerDelegate tabController.closeTab(tab) // Dismiss picker if current tab is closed using the picker - if tab == self.tab { + if tab == currentTab { picker.dismiss(animated: true, completion: nil) } } @@ -769,10 +767,10 @@ extension BrowserViewController: UITextFieldDelegate } } - tab.beginLoadingURL(url) + currentTab.beginLoadingURL(url) } else { let searchURL = Settings.shared.searchProvider.provider().searchURLWithQuery(text) - tab.beginLoadingURL(searchURL) + currentTab.beginLoadingURL(searchURL) } textField.resignFirstResponder() @@ -795,7 +793,7 @@ extension BrowserViewController: UITextFieldDelegate extension BrowserViewController: ReaderViewControllerDelegate { func readerViewController(_ reader: ReaderViewController, didRequestNavigationToURL navigationURL: URL) { - tab.beginLoadingURL(navigationURL) + currentTab.beginLoadingURL(navigationURL) } } diff --git a/App/Common UI/GradientView.swift b/App/Common UI/GradientView.swift index 3291af1..6830ae8 100644 --- a/App/Common UI/GradientView.swift +++ b/App/Common UI/GradientView.swift @@ -28,6 +28,11 @@ class GradientView: UIImageView self.init(image: nil) self.direction = direction self.colors = colors + + registerForTraitChanges([UITraitUserInterfaceStyle.self]) { [weak self] (traitEnvironment: Self, previousTraitCollection) in + self?.image = nil + self?.setNeedsLayout() + } } private func gradientImage(forSize size: CGSize) -> UIImage? { @@ -70,12 +75,4 @@ class GradientView: UIImageView generatedImageSize = bounds.size } } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - - // Regenerate image - image = nil - setNeedsLayout() - } } diff --git a/App/Common UI/ReliefButton.swift b/App/Common UI/ReliefButton.swift index b54f0ff..2cb03e4 100644 --- a/App/Common UI/ReliefButton.swift +++ b/App/Common UI/ReliefButton.swift @@ -69,12 +69,14 @@ class ReliefButton: UIButton backgroundView.layer.rasterizationScale = UIScreen.main.scale addSubview(backgroundView) - traitCollectionDidChange(nil) + registerForTraitChanges([UITraitUserInterfaceStyle.self], handler: handleTraitCollectionChange) pointerStyleProvider = { (button, pointerEffect, pointerShape) -> UIPointerStyle? in let preview = UITargetedPreview(view: button) return UIPointerStyle(effect: .lift(preview), shape: pointerShape) } + + handleTraitCollectionChange(self, previousCollection: nil) } required init?(coder: NSCoder) { @@ -99,7 +101,7 @@ class ReliefButton: UIButton return inverted ? colors.reversed() : colors } - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + private func handleTraitCollectionChange(_ environment: UITraitEnvironment, previousCollection: UITraitCollection?) { setBackgroundInverted(isHighlighted) backgroundView.layer.borderColor = { traitCollection -> UIColor in if traitCollection.userInterfaceStyle == .dark { @@ -107,7 +109,7 @@ class ReliefButton: UIButton } else { return .white } - }(traitCollection).cgColor + } (traitCollection).cgColor } internal func setBackgroundInverted(_ inverted: Bool) { diff --git a/App/Scene Delegates/BrowserSceneDelegate.swift b/App/Scene Delegates/BrowserSceneDelegate.swift index f7c10a2..4b2d627 100644 --- a/App/Scene Delegates/BrowserSceneDelegate.swift +++ b/App/Scene Delegates/BrowserSceneDelegate.swift @@ -30,7 +30,7 @@ class BrowserSceneDelegate: UIResponder, UIWindowSceneDelegate { if let urlContext = connectionOptions.urlContexts.first { let url = urlContext.url - browserViewController.tab.beginLoadingURL(url) + browserViewController.currentTab.beginLoadingURL(url) } #if targetEnvironment(macCatalyst) @@ -59,8 +59,8 @@ class BrowserSceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { for urlContext in URLContexts { - if browserViewController?.tab.url == nil { - browserViewController?.tab.beginLoadingURL(urlContext.url) + if browserViewController?.currentTab.url == nil { + browserViewController?.currentTab.beginLoadingURL(urlContext.url) } else { browserViewController?.createNewTab(withURL: urlContext.url) } diff --git a/App/Titlebar and URL Bar/ToolbarViewController.swift b/App/Titlebar and URL Bar/ToolbarViewController.swift index da9b6df..2a4278d 100644 --- a/App/Titlebar and URL Bar/ToolbarViewController.swift +++ b/App/Titlebar and URL Bar/ToolbarViewController.swift @@ -66,10 +66,13 @@ class ToolbarViewController: UIViewController newTabButton.setImage(UIImage(systemName: "plus"), for: .normal) let toolbarAnimationDuration: TimeInterval = 0.3 - urlBar.textField.addAction(.init(handler: { [traitCollection, toolbarView, urlBar] _ in - if traitCollection.horizontalSizeClass == .compact { - UIView.animate(withDuration: toolbarAnimationDuration) { - toolbarView.cancelButtonVisible = urlBar.textField.isFirstResponder + urlBar.textField.addAction(.init(handler: { [weak self] _ in + guard let self, let parent else { return } + + // xxx: Not sure why I need to refer to parent here. This view controller isn't inheriting anything. + if parent.traitCollection.horizontalSizeClass == .compact { + UIView.animate(withDuration: toolbarAnimationDuration) { [unowned self] in + self.toolbarView.cancelButtonVisible = self.urlBar.textField.isFirstResponder } } }), for: [ .editingDidBegin, .editingDidEnd ]) @@ -78,12 +81,10 @@ class ToolbarViewController: UIViewController urlBar.textField.resignFirstResponder() }), for: .touchUpInside) - traitCollectionDidChange(nil) + reconfigureButtons(for: traitCollection.horizontalSizeClass) } - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - + public func reconfigureButtons(for horizontalSizeClass: UIUserInterfaceSizeClass) { toolbarView.leadingButtonsView.removeAllButtonViews() toolbarView.trailingButtonsView.removeAllButtonViews() @@ -92,7 +93,7 @@ class ToolbarViewController: UIViewController } // Setup toolbar based on trait collection - if traitCollection.horizontalSizeClass == .compact { + if horizontalSizeClass == .compact { toolbarView.trailingButtonsView.addButtonView(scriptControllerIconView) toolbarView.trailingButtonsView.addButtonView(newTabButton) toolbarView.trailingButtonsView.addButtonView(windowButton) diff --git a/SBrowser.xcodeproj/project.pbxproj b/SBrowser.xcodeproj/project.pbxproj index 5445619..c613b0c 100644 --- a/SBrowser.xcodeproj/project.pbxproj +++ b/SBrowser.xcodeproj/project.pbxproj @@ -776,7 +776,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -833,7 +833,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos.internal; @@ -854,7 +854,6 @@ CURRENT_PROJECT_VERSION = 4; DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = "App/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -882,7 +881,6 @@ CURRENT_PROJECT_VERSION = 4; DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = "App/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks",