2013-06-27 6 views
9

मैं प्रोग्राम के रूप में मेरे विचार पदानुक्रम बना रहा हूं इस तरह:प्रोग्रामेटिक दृश्य पदानुक्रम के लिए ऑटो लेआउट बाधाओं को स्थापित करना?

UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

UIViewController1* viewController1 = [[UIViewController1 alloc] init]; 
UIViewController2* viewController2 = [[UIViewController2 alloc] init]; 

UINavigationController* navigationController = [[UINavigationController alloc] init]; 
[navigationController setViewControllers:@[viewController1, viewController2] animated:NO]; 

[window setRootViewController:navigationController]; 
[window makeKeyAndVisible]; 

दो कुलपति XIB की है कि दोनों ही मामलों में autolayout का उपयोग से लोड किए गए हैं। सब कुछ अच्छा लग रहा है, लेकिन मैं कंसोल में कुछ चिंता AMBIGUOUS LAYOUT चेतावनी मिलती है, जब मैं वास्तव में एक po [[UIWindow keyWindow] _autolayoutTrace] कार्य करें:

*<UIWindow:0xc63bec0> 
| *<UILayoutContainerView:0xd3d79b0> - AMBIGUOUS LAYOUT 
| | *<UINavigationTransitionView:0xd3d8b60> - AMBIGUOUS LAYOUT 
| | | *<UIViewControllerWrapperView:0xd566c00> - AMBIGUOUS LAYOUT 
| | | | *<UIView:0xc66b290> - AMBIGUOUS LAYOUT 
| | | | | *<UIView:0xc66b0e0> - AMBIGUOUS LAYOUT 
| | | | | | *<MKMapView:0xd504800> - AMBIGUOUS LAYOUT 

तो मेरे सवाल का, मैं कैसे उनमें से छुटकारा पाऊँ है? या अधिक आम तौर पर तैयार किया गया है, आप अपनी खिड़की को स्थापित करने और ऑटो लेआउट का उपयोग करके प्रोग्रामेटिक रूप से पदानुक्रम देखने के बारे में कैसे जाते हैं?

मुझे प्रोग्राम को प्रोग्रामेटिक रूप से स्थापित करने के मामले में दस्तावेज बहुत अस्पष्ट लगता है। और भले ही मैंने इस मामले पर तीनों डब्ल्यूडब्ल्यूडीसी वीडियो देखे, मुझे यह कैसे करना है इस पर पकड़ नहीं मिल सका।

संपादित करें: ऐसा लगता है कि मेरे पास केवल नए आईओएस 7 से संबंधित मुद्दे हैं। चूंकि यह एनडीए के तहत है, इसलिए मैं इस चर्चा को नामित ऐप्पल डेवलपर मंचों पर ले जाऊंगा।

उत्तर

1

AMBIGUOUS LAYOUT का अर्थ है कि आपने अपने दृश्य को कैसे रखना है, यह जानने के लिए ऑटो लेआउट के लिए पर्याप्त निर्दिष्ट नहीं किया है। दूसरे शब्दों में, जो आपने निर्दिष्ट किया है वह थोड़ा अस्पष्ट है।

यह टूटी बाधाओं से काफी अलग है, जहां आपके पास दो या अधिक बाधाएं हैं जो ऑटो लेआउट को अलग-अलग चीजों को करने के लिए बताती हैं।

एक अस्पष्ट लेआउट के साथ, ऑटो लेआउट को आजमाएं कि आप क्या करना चाहते हैं इसका पता लगाने के लिए प्रयास करें। उम्मीद है कि आप जो चाहते हैं वह होगा, लेकिन इसकी गारंटी नहीं है। इसलिए चेतावनी।

यह उत्तर वास्तव में आपको यह बताने का स्थान नहीं है कि कैसे शुरू किया जाए। लेकिन शुक्र है कि अब ऑटो लेआउट संसाधन दिखाई दे रहे हैं।

एक पुस्तक iOS Auto Layout Demystified है। हालांकि मैंने इसे खरीदा है, मुझे अभी तक इसे पढ़ने का मौका नहीं मिला है। हालांकि यह बहुत अच्छा लग रहा है।

इसके अलावा, ओले बेगमैन के उत्कृष्ट लेख 10 Things You Need To Know About Cocoa Autolayout देखें।

ट्यूटोरियल शुरू करने के लिए, रे वेंडरलिच के Beginning Auto Layout in iOS 6: Part 1/2 पर एक नज़र डालें।

अंत में, अगर मैं कह सकता हूं कि एक ऑटो लेआउट चीज है जो मुझे हर बार प्राप्त करती है, तो यह setTranslatesAutoresizingMaskIntoConstraints को NO पर ध्वजांकित करने के लिए भूल रहा है, जो मैं प्रोग्रामेटिक रूप से बनाता हूं कि मैं ऑटो लेआउट का उपयोग करना चाहता हूं। जब आप कंसोल पर किसी भी अजीब दिखने वाले बाधाओं को देखते हैं तो अपने दिमाग के पीछे रखें।

+0

मैं सामान्य दर्शन और डीबगिंग के तरीकों को समझता हूं, लेकिन मेरे प्रश्न इस बात से संबंधित हैं कि मैं कोड में स्क्रैच से दृश्य पदानुक्रम कैसे बना सकता हूं। मैं अपने UIWindow को इसके सुपर व्यू पर नहीं लगा सकता क्योंकि इसमें कोई नहीं है। – ABeanSits

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