2014-10-14 5 views
14

आईओएस 8 और एक्सकोड 6 के साथ, स्टोरीबोर्ड में अब हमारे पास स्क्रीन आकार ग्रिड है जो हमें आकार वर्ग का चयन करने देता है। जहां आप विभिन्न स्क्रीन आकारों के लिए लेआउट स्वरूपण का चयन कर सकते हैं।स्वचालित रूप से ऑटोलाइट आकार वर्ग सेट करें?

मुझे यह शानदार मदद मिली है, क्योंकि यह मुझे प्रत्येक स्क्रीन आकार के लिए आधार बाधाओं और फिर अद्वितीय सेट करने की अनुमति देता है।

मेरा सवाल है, क्या आप प्रोग्रामेटिक रूप से ऐसा कर सकते हैं? मैं अपना NSLayoutConstraint सामान्य के रूप में बनाता हूं लेकिन मुझे विभिन्न स्क्रीन आकारों के लिए अलग-अलग बाधाओं को निर्दिष्ट करने में सक्षम होना चाहिए।

+2

उन्हें आकार वर्ग कहा जाता है। – rckoenes

+0

धन्यवाद, यह सुनिश्चित नहीं है कि मुझे यह कैसे याद आया! अब अगर केवल 'NSLayoutConstraint' या इसी तरह के साथ प्रोग्राम कक्षाओं को निर्धारित करने का कोई तरीका था। –

उत्तर

1

यह थोड़ा उलझन में & दस्तावेज़ीकरण में खोजने के लिए मुश्किल है क्योंकि "आकार वर्ग" वास्तव में NSObject की तरह "कक्षा" नहीं है। वे वास्तव में एक enum में परिभाषित कर रहे हैं/typedef कहा जाता है: के लिए एक दृश्य के UITraitCollection के लिए एक UITraitCollection

कक्षा/प्रकार के तरीकों के साथ है आप आधारित एक बनाने के लिए अनुमति देते हैं UIUserInterfaceSizeClass

तरह से क्षैतिज & लंबवत आकार वर्ग पाने के लिए यूआई मुहावरे (आईपैड/आईफोन), या विशिष्ट क्षैतिज & लंबवत विकल्प (कॉम्पैक्ट, नियमित) के साथ, अन्य विशेषता संग्रहों की एक सरणी से, विशेष प्रदर्शन पैमाने (जैसे रेटिना या नहीं) पर, लेकिन ईमानदार होने के लिए मैं नहीं हूं निश्चित रूप से अभी तक आप इसका उपयोग कैसे करेंगे ...

This question विशेषता को अद्यतन करते समय बाधाओं को अद्यतन करने पर चर्चा करता है willTransitionToTraitCollection(newCollection: UITraitCollection!, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator!)

आप सही हैं कि यूआईटीआरटी कोलेक्शन और इसकी गुण दोनों ही पढ़ाई कर रहे हैं, लेकिन स्पष्ट रूप से आप कुछ कारणों से एक नया संग्रह बना सकते हैं, और विशेषता चयन में बदलाव के दौरान लेआउट परिवर्तनों को संभालने में सक्षम हैं।

This previous question अनुकूली लेआउट का उपयोग करने के बारे में एक ऐप्पल आलेख के समान & लिंक समान है। डब्ल्यूडब्ल्यूडीसी वीडियो "UIKit के साथ बिल्डिंग अनुकूली ऐप्स" भी देखें।

+0

मुझे कल डब्ल्यूडब्ल्यूडीसी वीडियो देखने का समय होना चाहिए। हालांकि, आप एक दृश्य या लेआउट बाधा की विशेषता चयन गुण सेट नहीं कर सकते हैं, केवल पढ़ा। तो आप एक निश्चित विशेषता संग्रह से संबंधित एक बाधा कैसे लागू करेंगे? यह एक दिलचस्प बदलाव है जिसे उन्होंने लाया है, मैं इसे अब तक पसंद करता हूं। –

+0

बाधाओं को बदलने के बारे में एक संबंधित प्रश्न मिला और जोड़ा गया। नए UITraitCollections बनाने के लिए स्पष्ट रूप से विधियां हैं, और उन्हें 'इच्छानुसार ट्रांजिशन टोट्रेट कोलेक्शन' देखने के तरीकों से गुजरना है ... लेकिन मैंने कई महीनों में वीडियो के साथ पर्याप्त नहीं देखा है या वीडियो नहीं देखा है। मेरे लिए एक और नजर डालने का समय भी! मेरे लिए अनुकूली लेआउट के लिए प्रक्रिया और दस्तावेज़ीकरण बहुत खराब और भ्रमित है क्योंकि यह एक बड़ी नई सुविधा है ... अंत में इसे समझ जाएगा! – mc01

12

आईओएस 8 active संपत्ति NSLayoutConstraint पर प्रस्तुत करता है। यह आपको एक बाधा को सक्रिय या निष्क्रिय करने की अनुमति देता है। कई बाधाओं को सक्रिय/निष्क्रिय करने के तरीके भी हैं। जब उन्हें प्रोग्राम के रूप में बनाने

+ (void)activateConstraints:(NSArray *)constraints 
+ (void)deactivateConstraints:(NSArray *)constraints 
  • सरणियों में अपने बाधाओं रखें।
  • आपको आवश्यक प्रत्येक लेआउट के लिए एक सरणी बनाएं।
  • सक्रिय/निष्क्रिय कमी के जो भी सेट आप से willTransitionToTraitCollection
+0

धन्यवाद लेकिन शायद 2017 में एक और तरीका है? –

1

भीतर आपके प्रश्न का उत्तर करने के लिए, आप प्रोग्राम आकार वर्ग सेट कर सकते हैं की जरूरत है, तथापि, यह एक दर्द का एक सा है। आपको "setOverrideTraitCollection" को कॉल करना होगा, लेकिन पैरेंट व्यू कंट्रोलर से, वह नहीं जिसे आप वास्तव में एक विशेषता बदलना चाहते हैं।

मेरी स्थिति में, मैं आईपैड पर एक से अलग दिखने के लिए आईपैड पर एक स्प्लिट व्यू कंट्रोलर के मास्टर वीसी को बदलना चाहता था, हालांकि, वे दोनों डिफ़ॉल्ट रूप से कॉम्पैक्ट चौड़ाई/नियमित ऊंचाई पर सेट हैं। तो मैंने मास्टर के एनएवी नियंत्रक को उप-वर्गीकृत किया और मास्टर की विशेषताओं को नियमित चौड़ाई पर सेट करने के लिए कोड जोड़ा जब यह आईफोन नहीं है।

Swift कोड:

class MasterNavigationController: UINavigationController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     if (self.traitCollection.userInterfaceIdiom != .Phone) { 
      let newTraitCollection = UITraitCollection(horizontalSizeClass: .Regular) 
      self.setOverrideTraitCollection(newTraitCollection, forChildViewController: self.topViewController) 
     } 
    } 

} 

मुझे आशा है कि यह किसी को एक समान समाधान की तलाश में मदद करता है।

+0

आपने आकार वर्ग को मैन्युअल रूप से सेट किया है लेकिन पहले घोषित बाधाओं के साथ क्या करना है? सही तरीके से पता लगाने के लिए कि वे किस गुण से संबंधित हैं? –

+0

स्टोरीबोर्ड में प्रत्येक आकार वर्ग के लिए बाधाएं सेट की गई हैं (नीचे डिवाइस आइकन का उपयोग करके)। यहां डब्ल्यूडब्ल्यूडीसी 2016 का एक वीडियो है जहां वे हाल ही में बदल गए हैं। https://developer.apple.com/videos/play/wwdc2016/236/ –

+0

मुझे स्टोरीबोर्ड के बारे में पता है लेकिन सवाल प्रोग्रामेटिक रूप से घोषित बाधाओं के बारे में था –

संबंधित मुद्दे