เหตุใดตัวเลือก 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 px ไปทางขวา
DogCoffee

2
@DogCoffee: ฉัน debugged การกระโดดในแนวนอนเพื่อเปลี่ยน insets .listRowInsets()นี้สามารถแก้ไขได้โดยการตั้งค่าอย่างชัดเจนพวกเขาด้วย
Koraktor

ชื่นชมมากใช้งานได้ดี
DogCoffee

คำตอบ:


6

พฤติกรรมรถบั๊กกี้ที่เห็นได้ชัดสามารถแก้ไขได้เมื่อบังคับให้มุมมองการนำทางเป็นแบบซ้อนกัน:

NavigationView {}.navigationViewStyle(StackNavigationViewStyle())

นี่เป็นวิธีแก้ปัญหาของฉัน แต่ฉันจะไม่ทำเครื่องหมายว่าเป็นคำตอบที่ยอมรับ (ยัง)

  1. ดูเหมือนว่าจะเป็นข้อผิดพลาดถึงแม้ว่ามันจะถูกกระตุ้นโดยสถานการณ์พิเศษ
  2. โซลูชันของฉันจะไม่ทำงานหากคุณต้องการมุมมองการนำทางอื่น
  3. นอกจากนี้มันจะไม่แก้ไขการวางตำแหน่งแนวนอนตามที่ DogCoffee พูดถึงในความคิดเห็น

สิ่งนี้มีประโยชน์หากแอปของคุณทำงานบนไอแพดมิฉะนั้นมุมมองกิริยาของคุณจะปรากฏเป็นมุมมองการแยกรายละเอียด
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

จนกว่าข้อผิดพลาดนี้จะได้รับการแก้ไขวิธีอื่นในการแก้ไขปัญหานี้ในขณะที่การรักษา DoubleColumnNavigationViewStyle สำหรับ iPads จะเป็นการตั้งค่าสไตล์ตามเงื่อนไข:

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 ตัวเลือกข้อความแนวนอน

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