탐색 후 SwiftUI 선택기가 양식 재배치에있는 이유는 무엇입니까?


12

선택기를 클릭하면 선택보기로 이동합니다. 항목 목록이 맨 위에서 너무 멀리 렌더링되지만 애니메이션이 완료된 후 스냅됩니다. 왜 이런 일이 발생합니까?

데모 : https://gfycat.com/idioticdizzyazurevase

탐색 표시 줄 제목과 단추, 양식 섹션 및 기타 세부 정보를 배제하기위한 최소한의 예를 이미 만들었습니다.

import SwiftUI

struct NewProjectView: View {

    @State var name = ""

    var body: some View {
        NavigationView {
            Form {
                Picker("Client", selection: $name) {
                    Text("Client 1")
                    Text("Client 2")
                }
            }
        }
    }
}

struct NewProjectView_Previews: PreviewProvider {
    static var previews: some View {
        NewProjectView()
    }
}

미리보기 모드, 시뮬레이터 및 장치 (Xcode 11.2, 시뮬레이터의 iOS 13.2, 장치의 13.3 베타 1)에서 발생합니다.


YouTube에 SwiftUI의 기본 양식을 보여주는 상당히 최근의 비디오가 있으며, 현재 작동 중이므로 SwiftUI 자체의 버그가 아니라고 생각합니다. youtu.be/Ho88Eid9gi0?t=573
Koraktor

같은 문제-매우 성가신. 탐색 표시 줄에 인라인 스타일을 사용하면 사라집니다.
DogCoffee

3
... 또한 세포의 텍스트가 점프 - 4 픽셀에 대한 오른쪽
DogCoffee

2
@ DoogCoffee : 가로 점프를 디버깅하여 삽입물을 변경했습니다. 로 명시 적으로 설정하면이 문제를 해결할 수 있습니다 .listRowInsets().
Koraktor

대단히 감사하고 훌륭하게 작동합니다.
DogCoffee 19

답변:


6

탐색 뷰 스타일을 쌓아 올릴 때 분명히 버그가있는 동작을 해결할 수 있습니다.

NavigationView {}.navigationViewStyle(StackNavigationViewStyle())

이것은 내 문제에 대한 해결책이지만 이것을 받아 들인 대답으로 표시하지는 않습니다 (아직).

  1. 특별한 상황에 의해 유발 될지라도 버그 인 것 같습니다.
  2. 다른 탐색보기 스타일이 필요한 경우 내 솔루션이 작동하지 않습니다.
  3. 또한 주석에서 DogCoffee가 언급 한 수평 재배치를 수정하지 않습니다.

앱이 iPad에서 실행되는 경우에도 유용합니다. 그렇지 않으면 모달보기가 마스터-세부 분할보기로 나타납니다.
DogCoffee

2

내 생각에는 탐색 모음과 관련이 있습니다. 기본적으로 ( .navigationBarTitle확장에 대한 언급은 없음 ) 내비게이션 디스플레이 모드가로 설정되어 .automatic있습니다 .inline. 나는 이것과 비슷한 다른 게시물을 보았고 그들의 .navigationBarTitle("", displayMode: .inline)도움 을 사용하여 귀하의 솔루션을 사용하여 귀하의 게시물과 결합했습니다 .

import SwiftUI

struct NewProjectView: View {

    @State var name = ""

    var body: some View {
        NavigationView {
            Form {
                Picker("Client", selection: $name) {
                    Text("Client 1")
                    Text("Client 2")
                }
            }
            .navigationBarTitle("", displayMode: .inline)
        }
    }
}


struct NewProjectView_Previews: PreviewProvider {
    static var previews: some View {
        NewProjectView()
    }
}

이것은 문제를 해결하지만 내 경우에는 원하지 않는 제목 스타일을 변경합니다.
Koraktor

2

이 버그가 해결 될 때까지이 문제를 해결하는 다른 방법은 iPad 용 DoubleColumnNavigationViewStyle을 유지하면서 해당 스타일을 조건부로 설정하는 것입니다.

let navView = NavigationView {}
if UIDevice.current.userInterfaceIdiom == .pad {
    return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
    return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}

0

이 스레드 모두에게 감사합니다! 실제로 더 이해하고 문제 중 하나를 파악하는 데 실제로 도움이되었습니다. 다른 사람들과 공유하기 위해이 문제가 있었지만 토글이있는 섹션의 if / else 문에 섹션을 표시하도록 설정할 때이 문제가 발생했습니다. 토글이 활성화되면 섹션 헤더가 수평으로 몇 픽셀 이동합니다.

다음은 내가 고친 방법입니다.

Section(header: Text("Subject Identified").listRowInsets(EdgeInsets()).padding(.leading)) {
                Picker(selection: $subIndex, label: Text("Test")) {
                    ForEach(0 ..< subIdentified.count) {
                        Text(self.subIdentified[$0]).tag($0)
                    }
                }
            .labelsHidden()
            .pickerStyle(SegmentedPickerStyle())

선택기 선택보기에서 여전히 수평 이동이 발생하지만 수정 방법을 잘 모르겠습니다. 입력을 받기 위해 다른 스레드를 만들었습니다. 다시 감사합니다! SwiftUI Shift Picker 텍스트 가로

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.