हर कोई जानता है कि आप UIViewController init/viewDidLoad विधि पर फ्रेम आकार पर भरोसा नहीं कर सकते हैं; इस:UIViewController viewDidLoad गलत चौड़ाई/ऊंचाई
- (void)viewDidLoad: {
NSLog(@"%d", self.view.frame.size.width);
}
कई अवसरों में गलत आकार प्रिंट होगा (विशेष रूप से यह बहुत ज्यादा लैंडस्केप मोड में टूट गया है)
यह होगा वास्तव में हमेशा सही किया परिणाम वापस तो यह subviews लेआउट अच्छा है:
- (void)viewWillAppear: {
NSLog(@"%d", self.view.frame.size.width);
}
समस्या यह है कि व्यूविल्लएपर्स को हर बार दृश्य दिखाई देने पर बुलाया जाता है, इसलिए यह आवंटित करने या सबव्यूव जोड़ने के लिए उपयुक्त नहीं है। तो आप इंटरफ़ेस में प्रत्येक एकल दृश्य घोषित करते हैं और आप विशाल हेडर फ़ाइलों के साथ समाप्त होते हैं जिन्हें मैं पसंद नहीं करता क्योंकि अधिकांश आइटम प्रारंभिक सेटअप के बाद और अधिक कुशलता की आवश्यकता नहीं होती है।
तो सवाल एक है: क्या सबव्यूज़ पोजिशनिंग को संभालने का कोई बेहतर तरीका है?
प्रश्न दो बहुत संबंधित हैं, मान लें कि मेरे पास विभिन्न अन्य सबव्यू सहित यूआईवीव का सबक्लास है। मैं इसे अपने इंटरफ़ेस के अंदर घोषित करता हूं, और मैं इसे अपने init/viewDidLoad विधि में आवंटित/इनिट करता हूं।
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
...
menu = [[SNKSlidingMenu alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
...
}
हम पहले से ही जानते हैं अब हम viewWillAppear में इसका स्थान बदलना एक और अधिक सटीक पढ़ने
- (void)viewWillAppear:(BOOL)animated{
....
menu.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
....
}
समस्या यह है कि पाठ्यक्रम के सभी subviews रूप में अच्छी तरह पुनर्निर्धारित किए जाने की जरूरत है पाने के लिए की जरूरत है। यह लेआउटसब्यूव्स फ़ंक्शन द्वारा किया जाता है जिसे स्वचालित रूप से कॉल किया जाता है, लेकिन हमें एक ही समस्या मिलती है: सभी सबव्यूज़ को SNKSlidingMenu क्लास के इंटरफ़ेस के अंदर घोषित करने की आवश्यकता है .. क्या इसके आसपास कोई तरीका है?
धन्यवाद।
ऑटोलायआउट का उपयोग करें, या ऑटोरेसाइजिंग मास्क सेट करें? – jrturton