Skip to content

Commit 7c629f7

Browse files
[PM-21617] Update navigation bar style (#1674)
1 parent d26d4fa commit 7c629f7

File tree

37 files changed

+57
-18
lines changed

37 files changed

+57
-18
lines changed

BitwardenShared/UI/Platform/Application/Extensions/View+Toolbar.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,34 @@ extension View {
212212
saveToolbarButton(action: action)
213213
}
214214
}
215+
216+
/// A `ToolbarContent` that adjusts the navigation bar to display a large title on the leading
217+
/// edge of the navigation bar and hides the centered title. This has the appearance of a large
218+
/// title navigation bar without the extra padding above the title and overall hight similar to
219+
/// an inline navigation bar title.
220+
///
221+
/// - Parameters:
222+
/// - title: The navigation bar's title.
223+
/// - hidden: Whether the navigation bar updates should be hidden.
224+
/// - Returns: A `ToolbarContent` that adjusts the navigation bar to display a large title on
225+
/// the leading edge.
226+
///
227+
@ToolbarContentBuilder
228+
func largeNavigationTitleToolbarItem(_ title: String, hidden: Bool = false) -> some ToolbarContent {
229+
ToolbarItem(placement: .topBarLeading) {
230+
if !hidden {
231+
Text(title)
232+
.styleGuide(.largeTitle, weight: .semibold)
233+
.accessibilityAddTraits(.isHeader)
234+
}
235+
}
236+
237+
ToolbarItem(placement: .principal) {
238+
if !hidden {
239+
// Hide the centered navigation title view with an empty view.
240+
Text("")
241+
.accessibilityHidden(true)
242+
}
243+
}
244+
}
215245
}

BitwardenShared/UI/Platform/Settings/Settings/SettingsView.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ struct SettingsView: View {
1515
var body: some View {
1616
settingsItems
1717
.scrollView()
18-
.navigationBar(
19-
title: Localizations.settings,
20-
titleDisplayMode: store.state.presentationMode == .preLogin ? .inline : .large
21-
)
18+
.navigationBar(title: Localizations.settings, titleDisplayMode: .inline)
2219
.toolbar {
2320
closeToolbarItem(hidden: store.state.presentationMode != .preLogin) {
2421
store.send(.dismiss)
2522
}
23+
24+
largeNavigationTitleToolbarItem(
25+
Localizations.settings,
26+
hidden: store.state.presentationMode != .tab
27+
)
2628
}
2729
}
2830

BitwardenShared/UI/Platform/Tabs/TabCoordinator.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,23 @@ final class TabCoordinator: Coordinator, HasTabNavigator {
128128
rootNavigator.show(child: tabNavigator)
129129

130130
let vaultNavigator = module.makeNavigationController()
131-
vaultNavigator.navigationBar.prefersLargeTitles = true
131+
vaultNavigator.navigationBar.prefersLargeTitles = false
132132
vaultNavigator.navigationBar.accessibilityIdentifier = "MainHeaderBar"
133133
vaultCoordinator = module.makeVaultCoordinator(
134134
delegate: vaultDelegate,
135135
stackNavigator: vaultNavigator
136136
)
137137

138138
let sendNavigator = module.makeNavigationController()
139-
sendNavigator.navigationBar.prefersLargeTitles = true
139+
sendNavigator.navigationBar.prefersLargeTitles = false
140140
sendNavigator.navigationBar.accessibilityIdentifier = "MainHeaderBar"
141141
sendCoordinator = module.makeSendCoordinator(
142142
stackNavigator: sendNavigator
143143
)
144144
sendCoordinator?.start()
145145

146146
let generatorNavigator = module.makeNavigationController()
147-
generatorNavigator.navigationBar.prefersLargeTitles = true
147+
generatorNavigator.navigationBar.prefersLargeTitles = false
148148
generatorNavigator.navigationBar.accessibilityIdentifier = "MainHeaderBar"
149149
// Remove the hairline divider under the navigation bar to make it appear that the segmented
150150
// control is part of the navigation bar.
@@ -156,7 +156,7 @@ final class TabCoordinator: Coordinator, HasTabNavigator {
156156
generatorCoordinator?.start()
157157

158158
let settingsNavigator = module.makeNavigationController()
159-
settingsNavigator.navigationBar.prefersLargeTitles = true
159+
settingsNavigator.navigationBar.prefersLargeTitles = false
160160
settingsNavigator.navigationBar.accessibilityIdentifier = "MainHeaderBar"
161161
let settingsCoordinator = module.makeSettingsCoordinator(
162162
delegate: settingsDelegate,

BitwardenShared/UI/Tools/Generator/Generator/GeneratorView.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ struct GeneratorView: View {
7777
}
7878
.coordinateSpace(name: "generatorView")
7979
.background(Asset.Colors.backgroundPrimary.swiftUIColor)
80-
.navigationBarTitleDisplayMode(store.state.presentationMode == .inPlace ? .inline : .large)
81-
.navigationTitle(Localizations.generator)
80+
.navigationBar(title: Localizations.generator, titleDisplayMode: .inline)
8281
.task { await store.perform(.appeared) }
8382
.onChange(of: focusedFieldKeyPath) { newValue in
8483
store.send(.textFieldFocusChanged(keyPath: newValue))
@@ -96,6 +95,11 @@ struct GeneratorView: View {
9695
}
9796
}
9897

98+
largeNavigationTitleToolbarItem(
99+
Localizations.generator,
100+
hidden: store.state.presentationMode != .tab
101+
)
102+
99103
ToolbarItemGroup(placement: .topBarTrailing) {
100104
if store.state.presentationMode.isSelectButtonVisible {
101105
toolbarButton(Localizations.select) {

BitwardenShared/UI/Tools/Send/Send/SendList/SendListView.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,14 @@ struct SendListView: View {
226226
.refreshable { [weak store] in
227227
await store?.perform(.refresh)
228228
}
229-
.navigationBar(
230-
title: store.state.navigationTitle,
231-
titleDisplayMode: store.state.type == nil ? .large : .inline
232-
)
229+
.navigationBar(title: store.state.navigationTitle, titleDisplayMode: .inline)
233230
.toolbar {
234-
ToolbarItem(placement: .navigationBarLeading) {
231+
largeNavigationTitleToolbarItem(
232+
store.state.navigationTitle,
233+
hidden: store.state.type != nil
234+
)
235+
236+
ToolbarItem(placement: .topBarTrailing) {
235237
if !store.state.isInfoButtonHidden {
236238
Button {
237239
store.send(.infoButtonPressed)

BitwardenShared/UI/Vault/Vault/VaultList/VaultListView.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,11 @@ struct VaultListView: View {
350350
}
351351
profileSwitcher
352352
}
353-
.navigationTitle(store.state.navigationTitle)
354-
.navigationBarTitleDisplayMode(.large)
353+
.navigationBar(title: store.state.navigationTitle, titleDisplayMode: .inline)
355354
.toolbar {
356-
ToolbarItem(placement: .navigationBarLeading) {
355+
largeNavigationTitleToolbarItem(store.state.navigationTitle)
356+
357+
ToolbarItem(placement: .topBarTrailing) {
357358
ProfileSwitcherToolbarView(
358359
store: store.child(
359360
state: { state in

0 commit comments

Comments
 (0)