SwiftUI ดูเค้าโครงเนื้อหาปรากฏขึ้นโดยไม่คาดหมายปรากฏขึ้นหรือกระโดดข้าม?


16

เมื่อนำทางไปยังมุมมองใหม่ด้วยฟอร์มหรือรายการ (จัดกลุ่ม) เนื้อหาจะปรากฏขึ้นประมาณหนึ่งในสี่ส่วนจากด้านล่างของชื่อมุมมองการนำทางจากนั้น "ปรากฏ" ขึ้นไปยังตำแหน่งที่ถูกต้องประมาณครึ่งวินาทีในภายหลัง น่าเกลียดมาก. ไม่แน่ใจว่านี่เป็นข้อผิดพลาด SwiftUI หรือฉันกำลังจัดโครงสร้างบางอย่างไม่ถูกต้องหรือไม่

ฉันทดสอบสิ่งนี้ทั้งในเครื่องจำลองและอุปกรณ์ที่มีผลลัพธ์เหมือนกัน

ฉันคิดว่ามันมีบางอย่างเกี่ยวกับวิธีจัดการลิงก์นำทาง? ลิงก์การนำทางทุกรายการจะเรียก init () บนมุมมองปลายทางเมื่อ ContentView ปรากฏขึ้น สำหรับฉันสิ่งนี้ไม่สมเหตุสมผลไม่ควรเรียก init ปลายทาง () เรียกเฉพาะช่วงเวลาที่ผู้ใช้คลิกลิงก์การนำทางจริงหรือ

ฉันได้ลองกับแผ่นงานนี้และปัญหาไม่ได้อยู่กับแผ่นงานเฉพาะเมื่อใช้การเชื่อมโยงการนำทางที่มีรูปแบบหรือรายการที่จัดกลุ่มตามสไตล์

รหัสจากแอปพลิเคชันมุมมองใหม่ล่าสุด:

struct ContentView: View {

    var body: some View {
        NavigationView {
            NavigationLink(destination: TestView()) {
                Text("Test Link")
            }
        .navigationBarTitle("Content View")
        }
    }

}

struct TestView: View {

    var body: some View {
        Form {
            Text("Test View")
        }
        .navigationBarTitle("Test View")
    }

}

คำตอบ:


10

การระบุส่วนที่มีข้อความส่วนหัวช่วยแก้ไขปัญหาแม้ว่าข้อความนั้นจะว่างเปล่า แม้ว่าสิ่งนี้จะเว้นช่องว่างระหว่างชื่อการนำทางและแถวแรก

ทำงานกับทั้งแบบฟอร์มและรายการที่จัดกลุ่มเป็นแบบ

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}

พยายามแก้ไขทั้งสองวิธีในโพสต์นี้ยังคงเกิดขึ้น จะเกิดอะไรขึ้นอีก? แปลกมาก.
Lkabo

0

ฉันมีปัญหากับรายการที่ถูกส่งผ่าน NavigationLink จากรายการ GroupedListStyle เมื่อคุณทำเช่นนั้นดูเหมือนว่า SwiftUI จะพิจารณารายการที่ถูกพุชเป็นกลุ่ม เพียงแค่รีเซ็ต listStyle ควรทำงานในกรณีนี้:

List { ... }.listStyle(DefaultListStyle())
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.