Merge pull request #67 from kkk669/issues/64

FIx UI issues in iOS 15 (#64)
This commit is contained in:
Kenta Kubo 2023-04-26 00:51:23 +09:00 committed by GitHub
commit d833ea49c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,6 +10,7 @@ import SwiftUI
struct ContentView { struct ContentView {
@Environment(\.scenePhase) private var scenePhase @Environment(\.scenePhase) private var scenePhase
@Environment(\.horizontalSizeClass) private var hSizeClass
@Binding var servers: Resolvers @Binding var servers: Resolvers
@Binding var usedID: String? @Binding var usedID: String?
@State private var isEnabled = false @State private var isEnabled = false
@ -131,6 +132,9 @@ extension ContentView: View {
var body: some View { var body: some View {
if #available(iOS 16, *) { if #available(iOS 16, *) {
self.modernBody self.modernBody
} else if self.hSizeClass == .compact {
// Workaround for iOS 15
self.legacyBody.navigationViewStyle(.stack)
} else { } else {
self.legacyBody self.legacyBody
} }
@ -189,6 +193,7 @@ extension ContentView: View {
private var legacyBody: some View { private var legacyBody: some View {
NavigationView { NavigationView {
List { List {
if self.hSizeClass == .compact {
NavigationLink( NavigationLink(
"Instructions", "Instructions",
tag: -1, tag: -1,
@ -196,8 +201,15 @@ extension ContentView: View {
) { ) {
HowToActivateView(isSheet: false) HowToActivateView(isSheet: false)
} }
} else {
// Workaround for iOS 15
Button("Instructions") {
self.selection = -1
}
}
Section("Servers") { Section("Servers") {
ForEach(0..<self.servers.count, id: \.self) { i in ForEach(0..<self.servers.count, id: \.self) { i in
if self.hSizeClass == .compact {
NavigationLink( NavigationLink(
tag: i, tag: i,
selection: self.$selection selection: self.$selection
@ -206,6 +218,14 @@ extension ContentView: View {
} label: { } label: {
self.sidebarRow(at: i) self.sidebarRow(at: i)
} }
} else {
// Workaround for iOS 15
Button {
self.selection = i
} label: {
self.sidebarRow(at: i)
}
}
} }
.onDelete(perform: self.removeServers) .onDelete(perform: self.removeServers)
.onMove(perform: self.moveServers) .onMove(perform: self.moveServers)
@ -218,7 +238,11 @@ extension ContentView: View {
Text(self.alertMessage) Text(self.alertMessage)
} }
if !self.isEnabled { if self.selection == -1 {
HowToActivateView(isSheet: false)
} else if let i = self.selection {
self.detailView(at: i)
} else if !self.isEnabled {
HowToActivateView(isSheet: false) HowToActivateView(isSheet: false)
} else { } else {
Text("Select a server on the sidebar") Text("Select a server on the sidebar")
@ -278,7 +302,8 @@ extension ContentView: View {
} }
} }
@ViewBuilder private func sidebarRow(at i: Int) -> some View { private func sidebarRow(at i: Int) -> some View {
HStack {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(self.servers[i].name) Text(self.servers[i].name)
Text(self.servers[i].configuration.description) Text(self.servers[i].configuration.description)
@ -289,6 +314,7 @@ extension ContentView: View {
Image(systemName: "checkmark") Image(systemName: "checkmark")
} }
} }
}
private func detailView(at i: Int) -> some View { private func detailView(at i: Int) -> some View {
DetailView( DetailView(