我的应用程序显示2个工具栏而不是一个

时间:2014-01-10 17:55:33

标签: ios iphone ios7

当我在多个设备中通过xcode测试我的应用时,我的应用会按预期显示一个工具栏。之后我在应用商店上传了我的应用更新。但突然之间,我意识到在某些iphone(ios 7.0.4)中,在应用程序更新后,启动它时会出现2个工具栏。

我在此控制器的viewDidLoad函数中以编程方式添加工具栏。

UIImage* leftImg  = [UIImage imageNamed:@"left.png"];
UIImage* rightImg = [UIImage imageNamed:@"right.png"];

CGRect frame = CGRectMake(0, 0, leftImg.size.width, leftImg.size.height);
UIButton* lefButton = [[UIButton alloc] initWithFrame:frame];
UIButton* rigButton = [[UIButton alloc] initWithFrame:frame];

[lefButton setTitle:@"" forState:UIControlStateNormal & UIControlStateHighlighted];
[rigButton setTitle:@"" forState:UIControlStateNormal & UIControlStateHighlighted];

[lefButton setImage:leftImg forState:UIControlStateNormal];
[lefButton setImage:leftImg forState:UIControlStateSelected];

[rigButton setImage:rightImg forState:UIControlStateNormal];
[rigButton setImage:rightImg forState:UIControlStateSelected];

[lefButton addTarget:self action:@selector(loadPrevChapter:) forControlEvents:UIControlEventTouchUpInside];
[rigButton addTarget:self action:@selector(loadNextChapter:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *itemLeft  = [[UIBarButtonItem alloc] initWithCustomView:lefButton];
UIBarButtonItem *itemRight = [[UIBarButtonItem alloc] initWithCustomView:rigButton];
// In case i want to add Space between barbuttonitems
UIBarButtonItem *flexiableItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];

// add items to toolbar
NSArray *items = [NSArray arrayWithObjects:itemLeft, flexiableItem, itemRight, nil];
self.toolbarItems = items;
[self.navigationController setToolbarHidden:NO animated:NO];

UIImage *toolbarBgImage = [UIImage imageNamed:tlbImg];
UIImage *navbarBgImage = ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f) ? [UIImage imageNamed:navImgIos7] : [UIImage imageNamed:navImg];

[[UINavigationBar appearance] setBackgroundImage:navbarBgImage forBarMetrics:UIBarMetricsDefault];
[[UIToolbar appearance] setBackgroundImage:toolbarBgImage forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

但是我没有在导航控制器上添加这个工具栏:

[[self navigationController].view addSubview:_toolbar];
正如@Xeieshan所说。

之前有没有人注意到这样的事情,或者有人知道为什么会这样吗?

我的iPhone 5(v7.0.4)上运行的应用程序的屏幕截图

enter image description here

我的应用程序的屏幕截图,通过appstore安装,更新后,在iPhone 5上运行(v7.0.4)

enter image description here

2 个答案:

答案 0 :(得分:4)

[[self navigationController].view addSubview:toolbar];
这是如何在UIToolbar中添加UINavigationController,但我无法在您执行此操作时看到您的代码?

我认为您要在UIToolbarUIViewController上添加UINavigationController

答案 1 :(得分:0)

我建议不要将工具栏添加到UINavigationController.view,因为它打破了封装(即使在UIKit中没有强制执行)。

相反,添加一个包含工具栏和包含的UINavigationController的自定义根视图控制器。这也允许您正确布局工具栏,使其不覆盖导航控制器中的视图。