diff --git a/WMFComponents/Sources/WMFComponents/Extensions/Navigation Bar/WMFNavigationBarConfiguring.swift b/WMFComponents/Sources/WMFComponents/Extensions/Navigation Bar/WMFNavigationBarConfiguring.swift index 618833c04e4..267939e2c23 100644 --- a/WMFComponents/Sources/WMFComponents/Extensions/Navigation Bar/WMFNavigationBarConfiguring.swift +++ b/WMFComponents/Sources/WMFComponents/Extensions/Navigation Bar/WMFNavigationBarConfiguring.swift @@ -249,20 +249,26 @@ public extension WMFNavigationBarConfiguring where Self: UIViewController { if let searchButtonConfig { var rightBarButtonItems: [UIBarButtonItem] = [] - let image = WMFSFSymbolIcon.for(symbol: .magnifyingGlass) - let searchButton = UIBarButtonItem(image: image, style: .plain, target: searchButtonConfig.target, action: searchButtonConfig.action) - rightBarButtonItems.append(searchButton) + if let profileButtonConfig { + let profileImage = profileButtonImage(theme: WMFAppEnvironment.current.theme, needsBadge: profileButtonConfig.needsBadge) + let profileButton = UIBarButtonItem(image: profileImage, style: .plain, target: profileButtonConfig.target, action: profileButtonConfig.action) + profileButton.accessibilityLabel = profileButtonAccessibilityStrings(config: profileButtonConfig) + profileButton.accessibilityIdentifier = profileButtonAccessibilityID + rightBarButtonItems.append(profileButton) + } if let tabsButtonConfig { let tabsImage = WMFSFSymbolIcon.for(symbol: .tabsIcon) let tabsButton = UIBarButtonItem(image: tabsImage, style: .plain, target: tabsButtonConfig.target, action: tabsButtonConfig.action) + tabsButton.accessibilityLabel = tabsButtonConfig.accessibilityLabel + tabsButton.accessibilityHint = tabsButtonConfig.accessibilityHint rightBarButtonItems.append(tabsButton) - - if let leadingBarButtonItem = tabsButtonConfig.leadingBarButtonItem { - rightBarButtonItems.append(leadingBarButtonItem) - } } + let image = WMFSFSymbolIcon.for(symbol: .magnifyingGlass) + let searchButton = UIBarButtonItem(image: image, style: .plain, target: searchButtonConfig.target, action: searchButtonConfig.action) + rightBarButtonItems.append(searchButton) + if let leadingBarButtonItem = searchButtonConfig.leadingBarButtonItem { navigationItem.leftBarButtonItem = leadingBarButtonItem } diff --git a/Wikipedia/Code/ArticleViewController.swift b/Wikipedia/Code/ArticleViewController.swift index 86c2918511f..f14cb27785a 100644 --- a/Wikipedia/Code/ArticleViewController.swift +++ b/Wikipedia/Code/ArticleViewController.swift @@ -773,10 +773,9 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi var titleConfig: WMFNavigationBarTitleConfig = WMFNavigationBarTitleConfig(title: articleURL.wmf_title ?? "", customView: wButton, alignment: .centerCompact) - let backButtonConfig = WMFNavigationBarBackButtonConfig(needsCustomTruncateBackButtonTitle: true) - var profileButtonConfig: WMFNavigationBarProfileButtonConfig? = nil + var profileButtonConfig = profileButtonConfig(target: self, action: #selector(userDidTapProfile), dataStore: dataStore, yirDataController: yirDataController, leadingBarButtonItem: nil) let tabsButtonConfig = tabsButtonConfig(target: self, action: #selector(userDidTapTabs), dataStore: dataStore) diff --git a/Wikipedia/Code/SearchViewController.swift b/Wikipedia/Code/SearchViewController.swift index 821f8b67b1e..1c43fe912bf 100644 --- a/Wikipedia/Code/SearchViewController.swift +++ b/Wikipedia/Code/SearchViewController.swift @@ -258,10 +258,11 @@ class SearchViewController: ThemeableViewController, WMFNavigationBarConfiguring private func configureNavigationBar() { - let title = customTitle ?? CommonStrings.searchTitle + var title = customTitle ?? CommonStrings.searchTitle // check if it comes from article vc let isPushed = (navigationController?.viewControllers.first !== self) + var alignment: WMFNavigationBarTitleConfig.Alignment = (needsCenteredTitle || isPushed) ? .centerCompact : .leadingCompact extendedLayoutIncludesOpaqueBars = false if #available(iOS 18, *) { @@ -270,21 +271,18 @@ class SearchViewController: ThemeableViewController, WMFNavigationBarConfiguring extendedLayoutIncludesOpaqueBars = true } } - let wButton = UIButton(type: .custom) - wButton.setImage(UIImage(named: "W"), for: .normal) var titleConfig: WMFNavigationBarTitleConfig titleConfig = WMFNavigationBarTitleConfig(title: title, customView: nil, alignment: alignment) - if #available(iOS 18, *) { if UIDevice.current.userInterfaceIdiom == .pad && traitCollection.horizontalSizeClass == .regular { titleConfig = WMFNavigationBarTitleConfig(title: CommonStrings.searchTitle, customView: nil, alignment: .leadingLarge) } } - let profileButtonConfig: WMFNavigationBarProfileButtonConfig? - let tabsButtonConfig: WMFNavigationBarTabsButtonConfig? + var profileButtonConfig: WMFNavigationBarProfileButtonConfig? + var tabsButtonConfig: WMFNavigationBarTabsButtonConfig? if let dataStore { profileButtonConfig = self.profileButtonConfig(target: self, action: #selector(userDidTapProfile), dataStore: dataStore, yirDataController: yirDataController, leadingBarButtonItem: nil) let leadingItem: UIBarButtonItem? = (currentEmbeddedViewController === historyViewController) ? deleteButton : nil @@ -294,9 +292,21 @@ class SearchViewController: ThemeableViewController, WMFNavigationBarConfiguring tabsButtonConfig = nil } + // If in article view, except in iPad, we only keep the clear button + var isPushedWithoutTabsAndProfile = false + if isPushed && !(UIDevice.current.userInterfaceIdiom == .pad && traitCollection.horizontalSizeClass == .regular) { + profileButtonConfig = nil + tabsButtonConfig = nil + isPushedWithoutTabsAndProfile = true + } + let searchBarConfig = WMFNavigationBarSearchConfig(searchResultsController: nil, searchControllerDelegate: self, searchResultsUpdater: self, searchBarDelegate: self, searchBarPlaceholder: CommonStrings.searchBarPlaceholder, showsScopeBar: false, scopeButtonTitles: nil) configureNavigationBar(titleConfig: titleConfig, backButtonConfig: nil, closeButtonConfig: nil, profileButtonConfig: profileButtonConfig, tabsButtonConfig: tabsButtonConfig, searchBarConfig: searchBarConfig, hideNavigationBarOnScroll: !presentingSearchResults) + + if isPushedWithoutTabsAndProfile && currentEmbeddedViewController === historyViewController { + navigationItem.rightBarButtonItems = [deleteButton] + } } @MainActor