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,22 +193,38 @@ extension ContentView: View {
private var legacyBody: some View { private var legacyBody: some View {
NavigationView { NavigationView {
List { List {
NavigationLink( if self.hSizeClass == .compact {
"Instructions", NavigationLink(
tag: -1, "Instructions",
selection: self.$selection tag: -1,
) { selection: self.$selection
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
NavigationLink( if self.hSizeClass == .compact {
tag: i, NavigationLink(
selection: self.$selection tag: i,
) { selection: self.$selection
self.detailView(at: i) ) {
} label: { self.detailView(at: i)
self.sidebarRow(at: i) } label: {
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)
@ -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,15 +302,17 @@ extension ContentView: View {
} }
} }
@ViewBuilder private func sidebarRow(at i: Int) -> some View { private func sidebarRow(at i: Int) -> some View {
VStack(alignment: .leading) { HStack {
Text(self.servers[i].name) VStack(alignment: .leading) {
Text(self.servers[i].configuration.description) Text(self.servers[i].name)
.foregroundColor(.secondary) Text(self.servers[i].configuration.description)
} .foregroundColor(.secondary)
if self.usedID == self.servers[i].id.uuidString { }
Spacer() if self.usedID == self.servers[i].id.uuidString {
Image(systemName: "checkmark") Spacer()
Image(systemName: "checkmark")
}
} }
} }