带UINavigationController边界调整的UIPopoverController

问题描述:

我在UIPopoverController中嵌入了UINavigationController。它“有效”,但弹出窗口的顶部边界扩展到导航控制栏(在其后面)的大小,将边框的阴影投射到主视图的顶部(请参阅:弹出窗口的顶部边框高44度)。当我使用类本身实例化弹出窗口...不在UINavigationController中时,它一切正常(但是,我当然无法访问导航控制器)。带UINavigationController边界调整的UIPopoverController

我哪里错了?

CGPoint buttonPoint = [self.mapView convertPoint:sender.center fromView:self.guideButtonScroll]; 

GuideViewController *guideViewController = [[GuideViewController alloc] initWithNibName:@"GuideView" bundle:nil]; 

UINavigationController *guideNavigationController = [[UINavigationController alloc] initWithRootViewController:guideViewController]; 

self.buttonbarPopoverController = [[UIPopoverController alloc] initWithContentViewController:guideNavigationController]; 
self.buttonbarPopoverController.delegate = self; 
self.buttonbarPopoverController.popoverContentSize = CGSizeMake(320, 504); 
[self.buttonbarPopoverController presentPopoverFromRect:CGRectMake(buttonPoint.x - 30, buttonPoint.y, 10, 10) inView:self.mapView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

你所看到的并不是膨胀的顶部边界。 popover有正常的边界。你所看到的是导航控制器视图顶部的UINavigationBar。 UINavigationBar在iOS 6中投射出一个阴影。

UINavigationBar会自动给出与弹出边框相匹配的特殊颜色/样式。当然,如果你不喜欢它,你可以改变它。如果你不想看,你也可以*隐藏导航控制器的导航栏。

+0

是的,就是这样。不幸的是,UIPopoverController不允许我将UINavigationalController放置在“popover”的内部......它将它合并到边界本身中。我想使用自定义的导航栏图像,但这似乎不可能。寻找其他选择,当我到达那里时会发送进度。 – canuckpilot 2013-03-18 13:46:26

+0

当然有可能。您可以自定义弹出边框,并且可以自定义导航栏。 – matt 2013-03-18 17:12:26

继承了UIPopoverController的子类,但没有得到popover的光泽外观。只需将UINavigationController放在UIViewController中即可...获取自定义导航栏和弹出窗口的光泽外观。以下是我最终得到的结果:

UIViewController *guideviewViewController = [[UIViewController alloc] init]; 
guideviewViewController.view.frame = CGRectMake(0, 0, 320, 508); 

GuideViewController *guideViewController = [[GuideViewController alloc] initWithNibName:@"GuideView" bundle:nil]; 

self.guideNavigationController = [[UINavigationController alloc] initWithRootViewController:guideViewController]; 
self.guideNavigationController.view.frame = CGRectMake(0, 0, 320, 508); 

[guideviewViewController.view addSubview:self.guideNavigationController.view]; 

CGPoint buttonPoint = [self.mapView convertPoint:sender.center fromView:self.guideButtonScroll]; 

self.guidePopoverController = [[UIPopoverController alloc] initWithContentViewController:guideviewViewController]; 
self.guidePopoverController.delegate = self; 
self.guidePopoverController.popoverContentSize = CGSizeMake(320, 508); 
[self.guidePopoverController presentPopoverFromRect:CGRectMake(buttonPoint.x - 30, buttonPoint.y, 10, 10) inView:self.mapView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];