0

知道如何移动导航栏视图,以便获得预期的填充吗?看起来弹出框重叠在导航栏的顶部、左侧和右侧。

这是我在从应用程序的根 splitViewController 派生的弹出控制器中的导航控制器。这是 < iOS 5.1 上的问题

UIPopoverController 的框架覆盖其内容的导航栏

4

1 回答 1

0

解决方案是UINavigationBarUIPopoverController. 准备好后我会发布实现。

更新

所以这是一个有趣的问题。iOS 4.x 和 iOS 5.0 使用了一个真正的、真正的弹出框,即浮动弹出框。自定义导航栏在此弹出窗口中不起作用(navBar setBackgroundImage在 iOS 5.0 和 iOS 4.x 中的类别drawRect覆盖)。

然而,5.1 使用了更多的“幻灯片”,自定义导航栏可以很好地工作。它实际上是一个更清洁的设计。

无论如何,我的观点是,现在我只需要在纵向且操作系统小于 5.1 时删除自定义导航栏格式。通常,您希望使用respondsToSelector它来代替手动确定操作系统版本。在这种情况下这不起作用。

仍在处理 iOS 4.x 修复,但这里是 iOS 5.0:

appDelete我设置自定义导航栏的地方:

//iOS 5.x:
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
    UIImage *image = [UIImage imageNamed:@"header.png"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

//iOS 4.x:
@implementation UINavigationBar (CustomBackground)
- (void)drawRect:(CGRect)rect
{   
    UIImage *image = [UIImage imageNamed:@"header.png"];
    [image drawInRect:CGRectMake(0, 0, 320, 44)];
}
@end

我在以下位置设置了一个观察者didFinishLaunching

//start orientation notifications
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:@"UIDeviceOrientationDidChangeNotification"
                                           object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
- (void) didRotate:(NSNotification *)notification
{
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (version < 5.1)
    {
        UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

        if (UIDeviceOrientationIsPortrait(orientation))
        {
            if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
            {
                [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
            }
        }
        else
        {
            if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
            {
                UIImage *image = [UIImage imageNamed:@"header.png"];
                [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
            }
        }
    }
}
于 2012-08-15T22:11:07.457 回答