iOS 7: Z-индекс значка UITabBarItem

Я хочу показать значок UITabBarItem над selectionIndicatorImage. Есть 3 скриншота:

Скриншоты

введите здесь описание изображения

Светло-серый цвет — selectionIndicatorImage. Да, значок выглядит хорошо. Когда я подкрашиваю внутри, значок облака UITabBar становится:

введите здесь описание изображения

Это неправильно.. Я хотел бы показать значок над изображением выбора. Если нет значка для UITabBar - выглядит хорошо.

введите здесь описание изображения

Как я могу решить эту проблему? Заранее спасибо.

Отредактировано

Я добавляю иконки в раскадровку. Для значка я сделал код:

UITabBarItem *cartTabBarItem = (UITabBarItem *)[self.tabBarController.tabBar.items objectAtIndex:3];
if ([[DataSourceWrapper getInstance] getFullCost] == 0)
         cartTabBarItem.badgeValue = nil;
    else
        cartTabBarItem.badgeValue = [NSString stringWithFormat:@"%.0f тнг", [[DataSourceWrapper getInstance] getFullCost]];

Для выбораIndicatorImage

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selected-tabbar-bg.png"]];

person Artem Z.    schedule 31.01.2014    source источник
comment
поделитесь своим кодом, как вы добавляете эту кнопку в иерархию представлений   -  person Retro    schedule 31.01.2014
comment
@Retro Я только что отредактировал свой вопрос   -  person Artem Z.    schedule 31.01.2014
comment
Это невозможно со значком по умолчанию, вам нужно добавить собственный вид значка и вывести его на передний план. см. здесь > stackoverflow.com/questions/20061704/   -  person Retro    schedule 31.01.2014
comment
@Retro создание пользовательской панели uitabbar мне очень помогает, спасибо.   -  person Artem Z.    schedule 31.01.2014
comment
Это здорово :) Рад это знать   -  person Retro    schedule 31.01.2014


Ответы (2)


Я знаю, что это немного сложно, но я думаю, что Apple не добавила подпредставление TabBar в правильном порядке. в любом случае я исправил это следующим образом

for (UIView *subview in marketTrackerAppDelegate.tabBarController.tabBar.subviews)
{
    if ([marketTrackerAppDelegate.tabBarController.neededController.tabBarItem respondsToSelector:@selector(view)] &&
        [marketTrackerAppDelegate.tabBarController.neededController.tabBarItem performSelector:@selector(view)] == subview)
    {
        [marketTrackerAppDelegate.tabBarController.tabBar bringSubviewToFront:subview];
        break;
    }
}
person dollar2048    schedule 07.03.2014

Я была такая же проблема. Вы можете исправить это с помощью кода, предложенного @dollar8, или изменить порядок создания UITabBarItems.

У меня есть 4-я вкладка со значком и SelectionIndicatorImage 5-й вкладки с наложением значка 4-й вкладки, поэтому сначала я установил 5-ю вкладку:

UIImage *item5image = [UIImage imageNamed:@"profile_tabbar_item"];
UIImage *item5imageSel = [UIImage imageNamed:@"profile_tabbar_item_selected"];
item5image = [item5image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item5imageSel = [item5imageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
tab5.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"" image:item5image selectedImage:item5imageSel];

и после установки 4-й вкладки:

UIImage *item4image = [UIImage imageNamed:@"messages_tabbar_item"];
UIImage *item4imageSel = [UIImage imageNamed:@"messages_tabbar_item_selected"];
item4image = [item4image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item4imageSel = [item4imageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
tab4.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"" image:item4image selectedImage:item4imageSel];

И порядок subview будет правильным. Когда я устанавливаю 4-ю вкладку перед 5-й вкладкой - вид значка наложения SelectionIndicatorImage.

person a_alexeev    schedule 24.03.2014