知道如何移动导航栏视图以便我有预期的填充吗?看起来弹出框架在导航栏的顶部,左侧和右侧重叠。
这是我在应用程序的根splitViewController派生的弹出控制器中的导航控制器。这是关于<的问题。 iOS 5.1
答案 0 :(得分:0)
解决方案是在UINavigationBar
中删除自定义UIPopoverController
样式。我会在准备好后发布实现。
更新
所以这很有趣。 iOS 4.x和iOS 5.0使用真正的真正popover,即浮动popover。自定义导航栏在此弹出框中不起作用(iOS 5.0中的navBar setBackgroundImage
和iOS 4.x中的类别drawRect
覆盖。)
然而,5.1使用了更多的“slideover”,其中自定义导航栏工作得很好。实际上这是一个更清洁的设计。
无论如何,我的观点是,现在我只需要在纵向和操作系统小于5.1时删除自定义navBar格式。通常,您希望使用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];
}
}
}
}