Ios UINavBar覆盖状态栏并重复背景自定义图像
我正在将应用程序从iOS 4.3更新到iOS 7,我无法修复一个问题。我在网上做了很多搜索,但运气不好。也有类似的问题,但对我不起作用: 我不使用故事板,我使用xib文件。 我在导航控制器中嵌入了视图控制器,在选项卡栏控制器中嵌入了视图控制器。 我在didFinishLaunchingWithOptions:方法中添加我的视图,如下所示:Ios UINavBar覆盖状态栏并重复背景自定义图像,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我正在将应用程序从iOS 4.3更新到iOS 7,我无法修复一个问题。我在网上做了很多搜索,但运气不好。也有类似的问题,但对我不起作用: 我不使用故事板,我使用xib文件。 我在导航控制器中嵌入了视图控制器,在选项卡栏控制器中嵌入了视图控制器。 我在didFinishLaunchingWithOptions:方法中添加我的视图,如下所示: HomeViewController *homeViewController = [[HomeViewController alloc] init
HomeViewController *homeViewController = [[HomeViewController alloc] init];
homeViewController.tabBarItem.image = [UIImage imageNamed:@"home.png"];
homeViewController.tabBarItem.title = NSLocalizedString(@"Home", @"Home");
UINavigationController *homeNavController = [[UINavigationController alloc] initWithRootViewController:homeViewController];
homeNavController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
//...other views
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, ..., nil];
要添加自定义背景图像,我使用代码(仍然使用相同的方法):
我尝试添加UINavigationBarDelegate和:
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
视图中控制器的名称:
self.navigationController.navigationBar.delegate = self;
出现以下错误:
由于未捕获异常而终止应用程序
“NSInternalInconsistencyException”,原因:“无法手动设置
由控制器管理的UINavigationBar上的委托。'
您知道如何解决此问题,使导航栏布局位于顶部而不覆盖状态栏吗
另一个问题是,我的应用程序中有大小为320x44、视网膜版本为640x88的图像徽标。图像正在重复。
为什么它的大小和导航条一样?
提前感谢。我使用的一种方法是:
UIView *navBar = nil;
[_customBar removeFromSuperview];
_customBar = nil;
//
CGFloat width = self.view.frame.size.width; // 320px
CGFloat height = 110.0f;
// subview height
navBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
[navBar setBackgroundColor:[UIColor blueColor]];
// redefine bar height
UINavigationBar *currentNavBar = self.navigationController.navigationBar;
CGRect frame = [currentNavBar frame];
frame.size.height = height;
frame.origin.x = 0.0f;
[currentNavBar setFrame:frame];
_normalBar = (UINavigationBar*) navBar;
// ******************************
// add your custom view to navBar
// ******************************
_normalBar = (UINavigationBar*) navBar;
[self.navigationController.navigationBar addSubview:navBar];
别忘了恢复原来的酒吧:
[_normalBar removeFromSuperview];
_normalBar = nil;
CGRect frame = self.navigationController.navigationBar.frame;
frame.size.height = 44.0f;
[self.navigationController.navigationBar setFrame:frame];
@viewDidLoad中的iDev我添加了日志NSLog(@“FRAME:%@”,NSStringFromCGRect(self.navigationController.navigationBar.FRAME));显示为44。我将应用程序从iOS4更新到iOS7,但我仍然希望支持ios6(6及以上)。您将导航栏大小设置为320*64。由于导航栏与状态栏44+20=64I合并,因此可以将图像大小调整为64,但仍将覆盖状态栏。
UIView *navBar = nil;
[_customBar removeFromSuperview];
_customBar = nil;
//
CGFloat width = self.view.frame.size.width; // 320px
CGFloat height = 110.0f;
// subview height
navBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
[navBar setBackgroundColor:[UIColor blueColor]];
// redefine bar height
UINavigationBar *currentNavBar = self.navigationController.navigationBar;
CGRect frame = [currentNavBar frame];
frame.size.height = height;
frame.origin.x = 0.0f;
[currentNavBar setFrame:frame];
_normalBar = (UINavigationBar*) navBar;
// ******************************
// add your custom view to navBar
// ******************************
_normalBar = (UINavigationBar*) navBar;
[self.navigationController.navigationBar addSubview:navBar];
[_normalBar removeFromSuperview];
_normalBar = nil;
CGRect frame = self.navigationController.navigationBar.frame;
frame.size.height = 44.0f;
[self.navigationController.navigationBar setFrame:frame];