Ответ 1
Оказывается, вы всегда должны иметь текст внутри tabitem. Пространство было создано пустым текстом.
Я получаю странное поведение с моей настраиваемой панелью вкладок. Изображения, кажется, выровнены неправильно. Вот скриншот (я выделил свой собственный фон панели вкладок, чтобы выделить мою проблему):
Вот код, который я использую для установки изображений для каждого состояния:
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, whatsOnNavController, mapNavController, infoNavController, nil];
self.tabBarController.delegate = self;
// For iOS 5 only - custom tabs
if ([self.tabBarController.tabBar respondsToSelector:@selector(selectedImageTintColor)])
{
// Set the background images
//[[UITabBar appearance] setBackgroundImage: [UIImage imageNamed:@"nav_bg.png"]];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"nav_over.png"]];
[homeNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_home_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_home"]];
[whatsOnNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_whats_on_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_whats_on"]];
[mapNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_map_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_map"]];
[infoNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_info_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_info"]];
}
Все мои изображения сменных вкладок имеют правильный размер (49 пикселей в высоту и 80 пикселей в ширину для версий без сетчатки).
Что может вызвать это странное поведение?
Вот обновленный снимок экрана с фоном на месте:
Оказывается, вы всегда должны иметь текст внутри tabitem. Пространство было создано пустым текстом.
В UIBarItem есть свойство (элемент UIBarButton наследуется от этого класса) imageInsets
.
Чтобы использовать полноразмерные изображения (49 пикселей) для finishedSelectedImage
и finishedUnselectedImage
, вам нужно установить эти вставки изображения:
tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
Теперь вы можете исправить это в Storyboard. Коррекция вставки изображения раскадровки
Выберите элемент панели вкладок, который вы хотите настроить, откройте "Инспектор размеров" и отредактируйте вставки верхнего и нижнего изображений. Вам нужно настроить их на одну и ту же сумму, иначе они будут просто хлюпать/растягивать изображение (так что +5 в верхней части и -5 в нижней части)
Это может показаться немного хакерским, но я считаю, что это единственный способ добиться того, чего вы хотите: вам просто нужно использовать готовые изображения с вкладками, которые имеют прозрачную 11-дюймовую "верхнюю прокладку" (22 пикселя для сетчатки). Затем ваши изображения должны быть высотой 60 пикселей (120 пикселей).
Мое приложение подключилось к App Store с помощью этой техники, поэтому вы должны быть в безопасности, чтобы использовать его.
Надеюсь, что это поможет!
Этот API действительно плохо документирован.
Ваш finishedSelectedImage
должен быть значком ~ 30x30 px. Это только значок на вкладке. Если вы создадите слишком высокий уровень finishedSelectedImage
, система не поместит его в нижней части экрана.
Понятно, что вы начинаете с полной ширины, 49px high backgroundImage
для tabBar, добавляете ширину одной табуляции, высоту 49px selectionIndicatorImage
, которая работает как фоновое изображение для выбранной вкладки, а затем добавляет два версии каждого значка табуляции ~ 30x30 px, finishedUnselectedImage
и finishedSelectedImage
.
Если вы добавите изображение в качестве подвью, а не с определенными фреймами, может помочь вам. Проверьте это
Попробуйте использовать немного более мелкие изображения, табуляция слегка сглаживает их