मुझे लगता है कि यह व्यापार तर्क के आधार पर UIViews
, सबसे अधिक बार दिखाने / छिपाने के लिए एक काफी सामान्य प्रतिमान है UILabels
। मेरा प्रश्न यह है कि छिपे हुए विचारों का जवाब देने के लिए ऑटोलेयूट का उपयोग करने का सबसे अच्छा तरीका क्या है जैसे कि उनका फ्रेम 0x0 था। यहां 1-3 सुविधाओं की एक गतिशील सूची का एक उदाहरण है।
अभी मेरे पास बटन से अंतिम लेबल तक 10px शीर्ष स्थान है, जो स्पष्ट रूप से लेबल के छिपे होने पर स्लाइड नहीं करेगा। अभी के रूप में मैंने इस बाधा के लिए एक आउटलेट बनाया और मैं कितने लेबल दिखा रहा हूं, इसके आधार पर स्थिर को संशोधित करता है। यह स्पष्ट रूप से थोड़ा हैक्य है क्योंकि मैं छिपे हुए फ्रेम पर बटन को पुश करने के लिए नकारात्मक निरंतर मूल्यों का उपयोग कर रहा हूं। यह भी बुरा है क्योंकि यह वास्तविक लेआउट तत्वों के लिए विवश नहीं किया जा रहा है, बस अन्य तत्वों के ज्ञात ऊंचाइयों / गद्दी के आधार पर स्थिर स्थिर गणना और जाहिर है कि AutoLayout के लिए बनाया गया था के खिलाफ लड़ाई।
मैं स्पष्ट रूप से सिर्फ अपने गतिशील लेबल के आधार पर नए अवरोध पैदा कर सकता हूं, लेकिन कुछ व्हॉट्सएप को ध्वस्त करने की कोशिश करने के लिए बहुत अधिक माइक्रोमैनेजिंग और बहुत अधिक क्रियाशीलता है। क्या बेहतर दृष्टिकोण हैं? फ्रेम का आकार 0,0 बदलना और ऑटोलेयट को अपनी चीज़ों की कमी के साथ कोई हेरफेर नहीं करने देना चाहिए? विचारों को पूरी तरह से हटाना?
ईमानदारी से, हालांकि, केवल छिपे हुए दृश्य के संदर्भ से स्थिरीकरण को सरल गणना के साथ कोड की एक पंक्ति की आवश्यकता होती है। नए अवरोधों को फिर से बनाना constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
इतना भारी लगता है।
फ़रवरी संपादित करें 2018 : के साथ बेन देखें जवाब UIStackView
रों