2015-01-29 14 views
8

पर ऑटो-लेआउट पूरा करने से पहले बुलाया गया है। वर्तमान में हमें समस्या है जो केवल आईओएस 7 डिवाइस को प्रभावित करता है।आईओएस - viewDidLayoutSubviews को आईओएस 7

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

हमारे कुलपति में, हम परिपत्र प्रकट करने के लिए इन विचारों के लिए मजबूर करने viewDidLayoutSubviews में निम्नलिखित है:

- (void)viewDidLayoutSubviews { 
    self.progressContentContainerView.layer.cornerRadius = self.progressContentContainerView.frame.size.width/2; 
} 

यह iOS8 पर ठीक से काम करने लगता है, iOS7 पर लेकिन वहाँ एक अवधि के बाद दृश्य प्रदर्शित किया गया है जहां बाधाओं को अभी तक लागू नहीं किया गया है और दृश्य/विचार का आकार गलत है (संलग्न स्क्रीनशॉट देखें)। यह स्वयं को हल करता है और आधे सेकेंड के बाद एक सर्कल को सही ढंग से प्रस्तुत करता है। ऐसा तब होता है जब हमारे विचार जो परिपत्र बनना चाहते हैं वे वीसी के दृश्य पदानुक्रम के शीर्ष स्तर पर नहीं हैं, जो दर्शाता है कि viewDidLayoutSubviews को सबव्यूव के सबव्यूज़ के समक्ष पेश किया गया है।

Circle with incorrect cornerRadius Circle properly rendered after half a second

मेरा अनुमान है कि हमारे विचार में संभावित नेस्टेड कंटेनर के लिए UIView उपवर्गीकरण, cornerRadius समायोजन करने के लिए यहाँ इस उपवर्ग के भीतर परिपत्र को देखने के लिए संदर्भ जोड़कर और अधिभावी viewDidLayoutSubviews द्वारा इस समस्या को हल कर सकता है। यह हालांकि कुछ कामकाज की तरह लगता है और मुझे यह देखने में दिलचस्पी है कि क्या अन्य विकल्प हैं।

क्या इस समस्या के लिए एक क्लीनर/अधिक मूर्खतापूर्ण समाधान है?

+0

मैं बस वार्षिक जनवरी गतिविधि जीवित रखने के लिए इसी तरह की एक मुद्दा – d0n13

उत्तर

1

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन आप बुला या तो की कोशिश की है:

[self.progressContentContainerView setNeedsUpdateConstraints]; 

या:

[self.progressContentContainerView layoutIfNeeded]; 
+0

आ रही हैं - 'लेआउट IfNeeded' जो मैं खोज रहा था। –