नेविगेशन के बाद रिपोजिटिंग के रूप में स्विफ्टयूई पिकर क्यों है?


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 पर एक हालिया वीडियो है, जो स्विफ्टयूआई में बुनियादी रूपों का प्रदर्शन कर रहा है, यह वहां काम कर रहा है, इसलिए मुझे लगता है कि यह स्विफ्टयूआई में ही एक बग नहीं है: youtu.be/Ho88Eid9gi0?t=573
कोरकाजी

एक ही मुद्दा - बहुत कष्टप्रद। यदि आप नेवी बार के लिए इनलाइन स्टाइल का उपयोग करते हैं तो यह चला जाता है।
डॉग कॉफ़ी

3
... यह भी कोशिकाओं में पाठ कूदता है - लगभग 4 पीएक्स दाईं ओर
डॉग कॉफ़ी

2
@ डोग्फ़ॉफ़ी: मैंने इनसेट्स को बदलते हुए क्षैतिज जंपिंग को डिबग किया। यह उनके साथ स्पष्ट रूप से निर्धारित करके तय किया जा सकता है .listRowInsets()
कोरकटोर

बहुत सराहना की, महान काम करता है।
डॉग कैफ़ी

जवाबों:


6

नेविगेशन दृश्य शैली को स्टैक्ड करने के लिए मजबूर करने पर स्पष्ट रूप से छोटी गाड़ी के व्यवहार के आसपास काम किया जा सकता है:

NavigationView {}.navigationViewStyle(StackNavigationViewStyle())

यह मेरी समस्या का समाधान है, लेकिन मैं इसे स्वीकृत उत्तर (अभी तक) के रूप में चिह्नित नहीं करूंगा।

  1. यह एक बग लगता है, भले ही यह विशेष परिस्थितियों से शुरू हो रहा हो।
  2. यदि आपको किसी अन्य नेविगेशन दृश्य शैली की आवश्यकता है तो मेरा समाधान काम नहीं करेगा।
  3. इसके अतिरिक्त, यह टिप्पणियों में डॉगकॉफ़ी द्वारा उल्लिखित क्षैतिज स्थिति को ठीक नहीं करेगा।

यह तब भी उपयोगी है जब आपका ऐप आईपैड पर चलता है, अन्यथा आपके मोडल विचार मास्टर - डिटेल स्प्लिट व्यू के रूप में मौजूद हैं।
डॉग कैफ़ी

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()
    }
}

यह मुद्दे के आसपास काम करता है, लेकिन यह शीर्षक शैली को भी बदलता है जो मेरे मामले में वांछित नहीं है।
कोराकटोर

2

इस बग को हल करने के लिए जब तक इस मुद्दे के आसपास काम करने का एक और तरीका नहीं है, जब तक आईपैड के लिए 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())

मैं अभी भी अपने पिकर चयन दृश्य पर क्षैतिज बदलाव कर रहा हूं और निश्चित नहीं हूं कि कैसे ठीक किया जाए। मैंने प्राप्त इनपुट के लिए एक और धागा बनाया। एक बार फिर धन्यवाद! स्विफ्टयूई शिफ्ट पिकर पाठ क्षैतिज

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.