पर एक अदृश्य परत है, मैंने फेसबुक जैसे साइड मेनू के साथ एक एप्लिकेशन बनाया है। मेरे पास रूट व्यू कंट्रोलर है जो स्वयं पर एक दृश्य जोड़ता है, फिर जब उपयोगकर्ता 'मेनू' बटन दबाता है तो यह दृश्य को स्लाइड करेगा ताकि आप मेनू देख सकें।UINavBar के पास अन्य बटन
मेरी समस्या यह है कि जब दृश्य पहली बार लोड होता है तो ऐसा लगता है कि यूआईएनएवीबार लगभग 20 पिक्सेल या उससे कम होना चाहिए। फिर स्वचालित रूप से (नीचे छवि थोड़ा दूर केंद्रित लग रहा है, क्योंकि यह एक मॉडल क्षैतिज फ्लिप है)
यह अपने आप समायोजित कर देता है और सिर्फ इतना है कि स्थिति पट्टी के नीचे ऊपर ले जाता है जब मॉडल परिवर्तन पूर्ण होने के।
यहाँ क्या होता है जब मैं "मेनू" बटन दबाएँ का एक स्क्रीनशॉट है। यह सही करने के लिए अधिक शीर्ष दृश्य स्लाइड
आप छवियों में देख सकते हैं इसके बाद के संस्करण मैं बाएँ तीर और दायां तीर फ्रेम पृष्ठभूमि लाल लिए निर्धारित किया है, ताकि मैं जहां क्लिक करने योग्य/tappable क्षेत्र देख सकते हैं है। मेरे पास एक और छवि है जिसे मैंने नीली रेखा खींची है, अगर मैं नीली रेखा या ऊपर क्लिक करता हूं तो यह दायां तीर ट्रिगर नहीं करेगा। यदि मैं बाईं ओर उसी सामान्य क्षेत्र में क्लिक करता हूं तो मेनू बटन ट्रिगर होगा। मैं इसे सिम्युलेटर और मोबाइल डिवाइस पर पुन: उत्पन्न करने में सक्षम हूं (इसलिए मैं बटन को छूने वाला वसा नहीं हूं)।
मुझे ऐसा लगता है कि जब नेविगेशन पट्टी कम लोड कर रहा है की तुलना में यह करने के लिए iPhone सोचता है कि यह अभी भी उस स्थिति में है, इसलिए जब मैं UIButton
फ्रेम के अंदर क्लिक करें यह अभी भी मेनू ट्रिगर कर रहा है और माना जाता है तीर चयनकर्ताओं को ट्रिगर नहीं करना। यदि मैं सीधे तीर के बीच में टैप करता हूं, तो यह तीर चयनकर्ताओं को ट्रिगर करता है लेकिन छवि के बाहर बस एक छोटा सा बिट, यह तीर चयनकर्ता को ट्रिगर नहीं करेगा।
यहाँ मेरी RootViewController
viewDidLoad
AppointmentViewController *appointmentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentViewController"];
NSLog(@"B: %@",NSStringFromCGRect(appointmentViewController.view.frame));
self.navController = [[UINavigationController alloc] initWithRootViewController:appointmentViewController];
NSLog(@"B2: %@",NSStringFromCGRect(appointmentViewController.view.frame));
NSLog(@"Nav Bounds: %@",NSStringFromCGRect(self.navController.view.frame));
NSLog(@"Bounds: %@",NSStringFromCGRect(self.contentView.bounds));
self.navController.view.frame = self.contentView.bounds;
NSLog(@"Nav Bounds2: %@",NSStringFromCGRect(self.navController.view.frame));
[self addShadowToMenu];
[self.contentView addSubview:self.navController.view];
RootViewController लॉग्स
2012-04-30 12:24:44.533 My-App[19929:fb03] B: {{0, 20}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] B2: {{0, 20}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds: {{0, 0}, {320, 480}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Bounds: {{0, 0}, {320, 460}}
2012-04-30 12:24:44.535 My-App[19929:fb03] Nav Bounds2: {{0, 0}, {320, 460}}
AppointmentViewController
self.title = [dataObj.preferences objectForKey:@"appts_name_plural"];
self.navigationItem.title = self.title;
dayView = [[APCalendarDayView alloc] initWithCalendarView:(APCalendarView *)self];
APListView = [self.storyboard instantiateViewControllerWithIdentifier:@"AppointmentListView"];
APListView.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
SideMenuView *myDelegate = [[SideMenuView alloc] init];
[self setSideMenuDelegate:myDelegate];
//set the delegate's currentViewController property so that we can add a subview to this View.
[sideMenuDelegate setCurrentViewController:self];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *today = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStyleBordered target:nil action:@selector(todayPressed)];
NSArray *appointmentNavigationItems = [[NSArray alloc] initWithObjects:@"Day",@"List",@"Month", nil];
navcontrol = [[UISegmentedControl alloc] initWithItems:appointmentNavigationItems];
[navcontrol setSegmentedControlStyle:UISegmentedControlStyleBar];
[navcontrol addTarget:self action:@selector(appointmentNavigationClicked:) forControlEvents:UIControlEventValueChanged];
[navcontrol setSelectedSegmentIndex:0];
UIBarButtonItem *segmentItems = [[UIBarButtonItem alloc] initWithCustomView:navcontrol];
NSArray *items = [NSArray arrayWithObjects:today,flexSpace,segmentItems, flexSpace, nil];
[appointmentToolbar setItems:items animated:NO];
[appointmentToolbar setAutoresizesSubviews:YES];
[[self.view superview] addSubview:myDelegate.view];
[self setViewSizeOffset:(appointmentToolbar.bounds.size.height)];
CalendarDayView
हैयदि मैं headerView
आगे से आगे बढ़ता हूं तो यह मुझे लाल क्षेत्र में कहीं भी चुनने की अनुमति देगा और तीर चयनकर्ता ट्रिगर किया जाएगा। हालांकि, मैं इसे एप्पल कैलेंडर से मेल खाना चाहता हूं और केवल नेविगेशन बार के नीचे होना चाहता हूं।
कोई भी जानता है कि नेविगेशन बार headerView
के शीर्ष भाग को टैप करने से क्यों अवरुद्ध कर रहा है? शीर्षलेख के हिस्से को साफ़ करने के लिए जो अवरुद्ध किया जा रहा है वह नीली रेखा के नीचे से ऊपर है। लाल पृष्ठभूमि के साथ UIButton
फ्रेम से जुड़ी एक क्रिया है, इसलिए इसे ईवेंट को ट्रिगर करना चाहिए, हालांकि ऐसा लगता है कि नवाबार UIButton
के आधे को नलियां प्राप्त करने से रोक रहा है।
क्या आप पोस्ट किए गए पहले कोड स्निपेट से सामग्री दृश्य सीमाएं और एनएवी नियंत्रक फ्रेम दोनों लॉग कर सकते हैं? मानक स्ट्रिंग प्राप्त करने के लिए NSStringFromCGRect का उपयोग करें जिसे आप कंसोल पर प्रिंट कर सकते हैं। – Sam
@ सैम मैंने ओपी को बाध्य लॉग – Bot