Skip to content

Commit 66dac70

Browse files
committed
- This fixes various navigation bugs across settings, including getting locked into a sub navigation section.
1 parent dabc17b commit 66dac70

File tree

4 files changed

+41
-37
lines changed

4 files changed

+41
-37
lines changed

CodeEdit/Features/Settings/SettingsView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,11 +184,11 @@ struct SettingsView: View {
184184
}
185185
}
186186
.navigationSplitViewColumnWidth(500)
187-
.hideSidebarToggle()
188187
.onAppear {
189188
model.backButtonVisible = false
190189
}
191190
}
191+
.hideSidebarToggle()
192192
.navigationTitle(selectedPage.name.rawValue)
193193
.toolbar {
194194
ToolbarItem(placement: .navigation) {

CodeEdit/Features/Settings/Views/SettingsForm.swift

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,41 @@ struct SettingsForm<Content: View>: View {
1717
@ViewBuilder var content: Content
1818

1919
var body: some View {
20-
Form {
21-
Section {
22-
EmptyView()
23-
} footer: {
24-
Rectangle()
25-
.frame(height: 0)
26-
.background(
27-
GeometryReader {
28-
Color.clear.preference(
29-
key: ViewOffsetKey.self,
30-
value: -$0.frame(in: .named("scroll")).origin.y
31-
)
32-
}
33-
)
34-
.onPreferenceChange(ViewOffsetKey.self) {
35-
if $0 <= -20.0 && !model.scrolledToTop {
36-
withAnimation {
37-
model.scrolledToTop = true
20+
NavigationStack {
21+
Form {
22+
Section {
23+
EmptyView()
24+
} footer: {
25+
Rectangle()
26+
.frame(height: 0)
27+
.background(
28+
GeometryReader {
29+
Color.clear.preference(
30+
key: ViewOffsetKey.self,
31+
value: -$0.frame(in: .named("scroll")).origin.y
32+
)
3833
}
39-
} else if $0 > -20.0 && model.scrolledToTop {
40-
withAnimation {
41-
model.scrolledToTop = false
34+
)
35+
.onPreferenceChange(ViewOffsetKey.self) {
36+
if $0 <= -20.0 && !model.scrolledToTop {
37+
withAnimation {
38+
model.scrolledToTop = true
39+
}
40+
} else if $0 > -20.0 && model.scrolledToTop {
41+
withAnimation {
42+
model.scrolledToTop = false
43+
}
4244
}
4345
}
44-
}
46+
}
47+
content
4548
}
46-
content
47-
}
48-
.introspect(.scrollView, on: .macOS(.v10_15, .v11, .v12, .v13, .v14, .v15)) {
49-
$0.scrollerInsets.top = 50
49+
.introspect(.scrollView, on: .macOS(.v10_15, .v11, .v12, .v13, .v14, .v15)) {
50+
$0.scrollerInsets.top = 50
51+
}
52+
.formStyle(.grouped)
53+
.coordinateSpace(name: "scroll")
5054
}
51-
.formStyle(.grouped)
52-
.coordinateSpace(name: "scroll")
5355
.safeAreaInset(edge: .top, spacing: -50) {
5456
EffectView(.menu)
5557
.opacity(!model.scrolledToTop ? 1 : 0)

CodeEdit/Features/Settings/Views/View+HideSidebarToggle.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
import SwiftUI
9+
import SwiftUIIntrospect
910

1011
extension View {
1112
func hideSidebarToggle() -> some View {
@@ -16,12 +17,11 @@ extension View {
1617
struct HideSidebarToggleViewModifier: ViewModifier {
1718
func body(content: Content) -> some View {
1819
content
19-
.task {
20-
let window = NSApp.windows.first { $0.identifier?.rawValue == SceneID.settings.rawValue }!
21-
let sidebaritem = "com.apple.SwiftUI.navigationSplitView.toggleSidebar"
22-
let index = window.toolbar?.items.firstIndex { $0.itemIdentifier.rawValue == sidebaritem }
23-
if let index {
24-
window.toolbar?.removeItem(at: index)
20+
.introspect(.window, on: .macOS(.v13, .v14, .v15)) { window in
21+
if let toolbar = window.toolbar {
22+
let sidebarItem = "com.apple.SwiftUI.navigationSplitView.toggleSidebar"
23+
let sidebarToggle = toolbar.items.first(where: { $0.itemIdentifier.rawValue == sidebarItem })
24+
sidebarToggle?.view?.isHidden = true
2525
}
2626
}
2727
}

CodeEdit/Features/Settings/Views/View+NavigationBarBackButtonVisible.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,20 @@ struct NavigationBarBackButtonVisible: ViewModifier {
1717
.toolbar {
1818
ToolbarItem(placement: .navigation) {
1919
Button {
20-
print(self.presentationMode.wrappedValue)
2120
self.presentationMode.wrappedValue.dismiss()
2221
} label: {
2322
Image(systemName: "chevron.left")
2423
.frame(width: 23)
2524
}
2625
}
2726
}
28-
.hideSidebarToggle()
27+
.navigationBarBackButtonHidden()
2928
.onAppear {
3029
model.backButtonVisible = true
3130
}
31+
.onDisappear {
32+
model.backButtonVisible = false
33+
}
3234
}
3335
}
3436

0 commit comments

Comments
 (0)