2014-01-10 3 views
0

Когда я тестирую свое приложение через xcode на нескольких устройствах, мое приложение показывает одну панель инструментов, как ожидалось. После этого я загрузил обновление своего приложения в магазине приложений. Но вдруг я понял, что в некоторых iphones (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

+1

Пожалуйста, разместите здесь какой-либо код или мы не знаем, как вы добавили панель инструментов. –

+0

@XhackerLiu извините за последнее время. Я обновил сообщение с кодом. –

+0

Вы пытались установить сборку Release из XCode? Это первое отличие, которое приходит мне в голову при установке xcode и установке appstore. –

ответ

4

[[self navigationController].view addSubview:toolbar];
Это как добавить UIToolbar в UINavigationController, но я не могу видеть свой код, где вы это делаете?

Я думаю, вы добавляете UIToolbar как на UIViewController, так и на UINavigationController.

+0

Я не использую это. Я не могу получить доступ сейчас в своем коде, поэтому я проведу его через пару часов. –

+0

У меня установлена ​​версия, и теперь я вижу проблему. Но пока не понимаю, почему это происходит. Итак, я буду строить снова с вашим решением, и, прежде чем перейти к дистрибуции, я запустим выпуск и дам вам знать, исправлена ​​ли проблема. –

0

Я бы посоветовал не добавлять панель инструментов к UINavigationController.view, так как она разрушает инкапсуляцию (хотя это не очень сильно применяется в UIKit).

Вместо этого добавьте пользовательский контроллер корневого представления, содержащий панель инструментов, и содержащийся в ней UINavigationController. Это также позволяет правильно размещать панель инструментов так, чтобы она не охватывала виды в навигационном контроллере.

Смежные вопросы