我正在将应用从iOS 4.3更新到iOS 7,我无法解决一个问题。我在网上做了很多搜索,但没有运气。有类似的问题,但它对我不起作用:
我不使用故事板,我使用xib文件。 我有嵌入在标签栏控制器中的导航控制器中的视图控制器。 我在didFinishLaunchingWithOptions:这样的方法中添加我的观点:
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];
要添加自定义背景图片,我使用代码(仍采用相同的方法):
[[UINavigationBar appearance] setTintColor:UIColorFromRGB(0xFFA722)];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"Logo.png"] forBarMetrics:UIBarMetricsDefault];
我尝试添加UINavigationBarDelegate和:
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
但是当我设置委托时,我尝试以两种方式进行:
//在didFinishLaunchingWithOptions
中homeNavController.navigationBar.delegate = self;
视图控制器中的:
self.navigationController.navigationBar.delegate = self;
出现错误:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无法手动设置 委托由控制器管理的UINavigationBar。'
您知道如何解决此问题,让导航栏布局在顶部没有覆盖状态栏吗?
另一个问题是,我的应用程序中有大小为320x44的图像徽标和视网膜版本640x88正在重复图像。 为什么它像导航栏那样具有确切的大小? 提前谢谢。
答案 0 :(得分:0)
我使用的一种方式:
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];