로그인 응용 프로그램을 작업하고 있었고 로그인 후 범주가 나열되어 있습니다. 그리고 각 범주 아래에 일부 항목이 가로로 나열되어 있습니다. 로그인 후, 메인 페이지가 나타나고 모든 것이 훌륭하게 나열됩니다. 항목을 클릭하면 상세 화면으로 이동하지만 돌아 가려고하면 충돌이 발생합니다. 이 흐름을 찾았습니다 .`NavigationView`의`navigationBarItems` 안에`NavigationLink`를 배치 한 후 뒤로 탐색 할 때 왜 SwiftUI 앱이 충돌합니까? 그러나 나는 내 문제를 해결할 수 없었다. 프로젝트가 복잡해지면서 swiftui에서 탐색을 연습하고 싶었고 새 프로젝트를 만들었습니다. 그런데 최신 xcode 버전 11.3을 다운로드했습니다. 다음과 같이 간단한 코드를 작성했습니다.
NavigationView{
NavigationLink(destination: Test()) {
Text("Show Detail View")
}
.navigationBarTitle("title1")
그리고 Test ()보기는 다음과 같습니다.
import SwiftUI
struct Test: View {
var body: some View {
Text("Hello, World!")
}
}
struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}
보시다시피 정말 간단합니다. 나는 또한 인터넷에서 비슷한 예제를 시도했지만 작동하는 방식으로 작동하지 않습니다. 프로젝트를 실행할 때 탐색 링크를 클릭하면 Test ()보기로 이동합니다. 그런 다음 뒤로 버튼을 클릭하면 메인 페이지로 이동합니다. 그러나 탐색 링크를 두 번 클릭해도 아무런 변화가 없습니다. 탐색 링크는 한 번만 작동 한 후에 아무 일도 일어나지 않습니다. 탐색하지 않으며 오류가 발생하지 않습니다. 나는 swiftui를 처음 접했고 모든 것이 훌륭하지만 탐색입니다. 인터넷에서 많은 예제를 시도하고 솔루션을 제안했지만 내 문제를 해결하는 것은 없습니다.
답변
[업데이트] 2020 년 2 월 12 일-Xcode 11.4 베타에서이 문제를 확인한 결과이 문제가 해결되었습니다.
Xcode의 시뮬레이터에서 테스트 할 때 프로젝트에서도 동일한 문제가 발생했습니다. 그러나 실제 장치 (iOS 13.3이 설치된 iPhone X)에서 앱을 시작했을 때 NavigationLink
완전히 작동했습니다. 따라서 실제로 Xcode의 버그처럼 보입니다.
답변
시뮬레이터 11.4 :이 문제는 해결되었습니다
isActive
두 번째보기에서 기본값을 재설정해야합니다 . 장치 및 에뮬레이터에서 작동합니다.
struct NavigationViewDemo: View {
@State var isActive = false
var body: some View {
NavigationView {
VStack {
Text("View1")
NavigationLink(
destination: NavigationViewDemo_View2(isActive: $isActive),
isActive: $isActive,
label: { Button(action: { self.isActive = true }, label: { Text("click") }) })
}
}
}
}
struct NavigationViewDemo_View2: View {
@Binding var isActive: Bool
var body: some View {
Text("View2")
.navigationBarItems(leading: Button(action: { self.isActive = false }, label: { Text("Back") }))
}
}
답변
애플이 13.3을 배포 대상으로 선택할 수없는 관련 버그를 수정하면이 문제가 해결 될 것 입니다.
다른 사람들과 같은 문제가 발생했습니다. 이 문제는 13.2를 실행하는 시뮬레이터 및 미리보기에 있지만 13.3을 실행하는 내 자신의 장치에 배포 할 때 수정되었습니다.
답변
@ Александр Грабовский가 Xcode 11.3 버그처럼 보인다고 말하면서 동일한 문제가 발생하므로 아래처럼 사용자 정의 뒤로 버튼과 같은 해결 방법을 다운 그레이드하거나 사용해야합니다
struct ContentView: View {
@State private var pushed: Bool = false
var body: some View {
NavigationView {
VStack {
Button("Show Detail View") {
self.pushed.toggle()
}
NavigationLink(destination: Test(pushed: $pushed), isActive: $pushed) { EmptyView() }
}.navigationBarTitle("title1")
}
}
}
struct Test: View {
@Binding var pushed: Bool
var body: some View {
Text("Hello, World!")
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: BackButton(label: "Back") {
self.pushed = false
})
}
}
struct BackButton: View {
let label: String
let closure: () -> ()
var body: some View {
Button(action: { self.closure() }) {
HStack {
Image(systemName: "chevron.left")
Text(label)
}
}
}
}