से पहले फ्रेम को सही ढंग से सेट करने में असमर्थ मैं सोच रहा था कि अगर कोई viewDidLoad
और viewWillAppear
में उप-दृश्य का फ्रेम सेट करता है तो परिवर्तन स्क्रीन पर प्रभाव नहीं लेते हैं, लेकिन यदि आप इसे viewDidAppear
में सेट करते हैं तो वे करते हैं?viewDidAppear
मेरे मामले में मैं दो tableviews तो viewDidLoad
में उन्हें नीचे शिफ्ट करने के लिए एक और दृश्य जो viewDidLoad
में जोड़ा जाता है के लिए जगह के लिए के रूप में यह नहीं हमेशा यह प्रदर्शित करने के लिए आवश्यक है प्रयास कर के साथ एक कस्टम xib लोड हो रहा हूँ।
समस्या यह है कि जब मैं viewDidLoad
या viewWillAppear
में फ्रेम सेट करता हूं तो यह ऑब्जेक्ट पर सेट होता है, मैं इसे प्रिंट करके देख सकता हूं, लेकिन यह स्क्रीन पर दिखाई नहीं देता है। viewDidAppear
पर मेरे सेट फ्रेम कॉल को स्थानांतरित करने से सब कुछ अपेक्षित काम करेगा।
क्या यह सोचना गलत है कि मुझे viewDidLoad
में फ्रेम सेट करने में सक्षम होना चाहिए? जब कक्षा लेकिन कोई UI तत्व initialised किया गया है उन्हें संदर्भित करने के लिए किसी भी प्रयास को लोड किया जाता है और इसलिए ओवरराइट किया जाएगा या initialisation प्रक्रिया है जिसके viewDidLoad और viewDidAppear कॉल के बीच होता दौरान unavaliable
- (id)init {
if (self = [super initWithNibName:@"MyView" bundle:nil]) {}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.descriptionWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)] autorelease];
[self.view addSubview:self.descriptionWebView];
self.tableView1.autoresizingMask = UIViewAutoresizingNone;
self.tableView2.autoresizingMask = UIViewAutoresizingNone;
[self.descriptionWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"...." withExtension:@"html"]]];
table1LocationWithHeader = CGRectMake(self.tableView1.frame.origin.x, 200, self.tableView1.frame.size.width, self.tableView1.frame.size.height - 200);
table2LocationWithHeader = CGRectMake(self.tableView2.frame.origin.x, 200, self.tableView2.frame.size.width, self.tableView2.frame.size.height - 200);
//this will NOT work
self.tableView1.frame = table1LocationWithHeader;
self.tableView2.frame = table2LocationWithHeader;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//this will NOT work
self.tableView1.frame = table1LocationWithHeader;
self.tableView2.frame = table2LocationWithHeader;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//this WILL work
self.tableView1.frame = table1LocationWithHeader;
self.tableView2.frame = table2LocationWithHeader;
}
//I added these after comments for stack overflow users, it seems like viewDidLayoutSubviews is the best place to set the frame
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
//this will NOT work
self.tableView1.frame = table1LocationWithHeader;
self.tableView2.frame = table2LocationWithHeader;
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
//this WILL work
self.tableView1.frame = table1LocationWithHeader;
self.tableView2.frame = table2LocationWithHeader;
}
के लिए tableView.layoutIfNeeded() हो सकता है आप अपने कोड दिखा सकता है? – Nekto
संभावित डुप्लिकेट [UIViewController अमान्य फ्रेम देता है?] (Http://stackoverflow.com/questions/9539676/uiviewcontroller-returns-invalid-frame) –
एनबी! आपका व्यूविल्लएपियर कॉल '[सुपर व्यूडिडएपियर];' यह कॉपी-पेस्ट गलती की तरह दिखता है। – Speakus