[ios] 탐색 후 SwiftUI 선택기가 양식 재배치에있는 이유는 무엇입니까?
선택기를 클릭하면 선택보기로 이동합니다. 항목 목록이 맨 위에서 너무 멀리 렌더링되지만 애니메이션이 완료된 후 스냅됩니다. 왜 이런 일이 발생합니까?
데모 : 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)에서 발생합니다.
답변
탐색 뷰 스타일을 쌓아 올릴 때 분명히 버그가있는 동작을 해결할 수 있습니다.
NavigationView {
…
}.navigationViewStyle(StackNavigationViewStyle())
이것은 내 문제에 대한 해결책이지만 이것을 받아 들인 대답으로 표시하지는 않습니다 (아직).
- 특별한 상황에 의해 유발 될지라도 버그 인 것 같습니다.
- 다른 탐색보기 스타일이 필요한 경우 내 솔루션이 작동하지 않습니다.
- 또한 주석에서 DogCoffee가 언급 한 수평 재배치를 수정하지 않습니다.
답변
내 생각에는 탐색 모음과 관련이 있습니다. 기본적으로 ( .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()
}
}
답변
이 버그가 해결 될 때까지이 문제를 해결하는 다른 방법은 iPad 용 DoubleColumnNavigationViewStyle을 유지하면서 해당 스타일을 조건부로 설정하는 것입니다.
let navView = NavigationView {
…
}
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}
답변
이 스레드 모두에게 감사합니다! 실제로 더 이해하고 문제 중 하나를 파악하는 데 실제로 도움이되었습니다. 다른 사람들과 공유하기 위해이 문제가 있었지만 토글이있는 섹션의 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 텍스트 가로