知道如何移动导航栏视图,以便获得预期的填充吗?看起来弹出框重叠在导航栏的顶部、左侧和右侧。
这是我在从应用程序的根 splitViewController 派生的弹出控制器中的导航控制器。这是 < iOS 5.1 上的问题
知道如何移动导航栏视图,以便获得预期的填充吗?看起来弹出框重叠在导航栏的顶部、左侧和右侧。
这是我在从应用程序的根 splitViewController 派生的弹出控制器中的导航控制器。这是 < iOS 5.1 上的问题
解决方案是UINavigationBar
在UIPopoverController
. 准备好后我会发布实现。
更新
所以这是一个有趣的问题。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];
}
}
}
}