#swift #swiftui
Вопрос:
Я разрабатываю приложение с использованием SwiftUI (XCode 12.5.1), и каждый раз, когда одно из моих представлений появляется ровно после двух ссылок «Навигационной ссылки», все, что находится внутри, немного Form
смещается влево, как только появляется анимация. Следующее видео показывает, что происходит : первые два раза, когда я открываю вид, все в порядке. Следующие два раза, когда доступ к представлению осуществляется из вложенной навигационной ссылки, после завершения появляющейся анимации выполняется небольшой сдвиг влево.
https://www.dropbox.com/s/k3gjc42xlqp2auf/leftShift.mov?dl=0
У меня одна и та же проблема как на симуляторе, так и на реальном устройстве (iPhone). Вот проект: https://www.dropbox.com/s/l8r5hktg6lz69ob/Bug.zip?dl=0 . Основной код доступен ниже.
Вот основной вид ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination: PersonView()) {
Text("Person")
}
NavigationLink(destination: IndirectView()) {
Text("Indirect")
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Вот косвенный взгляд, IndirectView.swift
import SwiftUI
struct IndirectView: View {
var body: some View {
List {
NavigationLink(destination: PersonView()) {
Text("Person")
}
}
}
}
и вид человека, PersonView.swift
import SwiftUI
struct PersonView: View {
var body: some View {
Form {
VStack(alignment: .leading, spacing: 5) {
Text("Last Name")
.font(.system(.subheadline))
.foregroundColor(.secondary)
Text("Fayard")
}
}
}
}
У вас есть какие-нибудь идеи о том, что вызывает этот сдвиг?
Спасибо за вашу помощь
Франсуа
Комментарии:
1. Вы проверяли это на реальном устройстве? Кроме того, вам нужен минимальный воспроизводимый пример, так как для этого потребуется некоторое время поиграть в Xcode, если только кто-то случайно не попал в это.
Ответ №1:
Честно говоря, я понятия не имею, в чем причина проблемы, но вот исправление: добавьте эту строку кода в свой NavigaitonView
NavigationView {
// everything else
}.navigationViewStyle(StackNavigationViewStyle())