Установка высоты UITabBar

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

UITabBar *tabBar = self.tabBarController.tabBar;
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];

[item0 setFinishedSelectedImage:[UIImage imageNamed:@"activity_active.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"activity.png"]];
[item1 setFinishedSelectedImage:[UIImage imageNamed:@"agenda_active.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"agenda.png"]];
[item2 setFinishedSelectedImage:[UIImage imageNamed:@"settings_active.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"settings.png"]];

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

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

Мои изображения имеют высоту 44 пикселя, но я думаю, что мне нужно как-то изменить высоту панели вкладок.


person woutr_be    schedule 21.05.2012    source источник


Ответы (3)


Сам tabBar имеет размер 49 пикселей и отображается черным цветом за вашими изображениями (возможно, в [UITabBar layoutSubviews]). Затем ваши изображения отображаются сверху. Причина смещения заключается в том, что изображения, которые вы предоставляете, слишком велики, UITabBar ожидает значки размером 30x30 пикселей, а не изображение всего UITabBarItem.

Вот несколько вещей, которые можно попробовать:

  1. Укажите только значок размером 30x30 пикселей вместо всей кнопки вкладки.
  2. После того, как вы установили свои изображения на элемент вкладки, попробуйте следующее: [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)]; // play with insets until it renders correctly
  3. Подкласс UITabBar и переопределите layoutSubviews, чтобы сначала вызвать super, а затем измените положение изображения по своему усмотрению. Не рекомендуется, это может сломаться в будущих версиях iOS.
person DTs    schedule 22.11.2012

Использовать -

tabBar.frame=CGRectMake(x,y,w,h);

Таким образом вы можете установить xCord, yCord, ширину и высоту.

person rishi    schedule 21.05.2012
comment
Спасибо, но как ни странно, когда я установил y на self.window.frame.size.height, он все еще виден на несколько пикселей. То же самое, когда я использую [tabBar setFrame:CGRectMake(0.0f, self.window.frame.size.height - 44, self.window.frame.size.width, 44.0f)];, я все еще вижу выделение выбранная вкладка в черной полосе под ней - person woutr_be; 21.05.2012
comment
вам нужно зарегистрировать это значение y и проверить, правильно ли вы получаете эти значения? - person rishi; 21.05.2012
comment
self.window.frame.size.height: 480, taBar.frame.origin.y: 436, tabBar.frame.size.heigh: 44. Когда я делаю снимок экрана и проверяю фотошоп, панель вкладок имеет размер всего 428 пикселей на ось Y. - person woutr_be; 21.05.2012
comment
Из того, что я вижу, похоже, что наложение подсветки по умолчанию толкает мою панель вкладок вверх - person woutr_be; 21.05.2012
comment
похоже? не уверен, хотя? вам нужно отлаживать свой код и xib? - person rishi; 21.05.2012
comment
Что ты имеешь в виду? Я правильно устанавливаю значения, он регистрирует правильные значения. Однако панель вкладок отображается с разрешением 428 пикселей вместо 436. (Поскольку она зарегистрирована) - person woutr_be; 21.05.2012
comment
если он регистрирует 428, то он будет рисовать на 428, если только мы в каком-то месте снова не изменим это? - person rishi; 21.05.2012
comment
Он регистрирует 436 пикселей, как и должно быть. Но из-за черного пробела я проверяю значения в фотошопе, и панель вкладок рисуется с разрешением 428 пикселей. (Это значение 428 никогда не устанавливается в моем коде!) - person woutr_be; 21.05.2012
comment
Можете ли вы добавить снимок экрана с полной панелью вкладок или, если возможно, с полным экраном, чтобы я мог получить больше информации. А также вы можете проверить размеры, установив цвет фона элементов на красный, зеленый и т. д., это даст вам точное представление о том, где находится ваш элемент.\ - person rishi; 21.05.2012
comment
Это скриншот приложения: dl.dropbox.com/u/274185/. Я попытался установить синий фон панели вкладок, но он просто показывает черный. Как видите, его высота 44 пикселя, но по какой-то причине он кажется больше. - person woutr_be; 21.05.2012
comment
где вы определяете рамку контроллера панели вкладок? - person rishi; 21.05.2012
comment
В моем делегате приложения прямо перед вызовом [self.window makeKeyAndVisible]; - person woutr_be; 21.05.2012
comment
pastebin.com/AQjG2kXu, поэтому я создаю вкладку с тремя UINavigationController и добавляю ZUUIRevealController. (Также пробовал без ZUUIRevealController, но та же проблема) - person woutr_be; 21.05.2012
comment
Все еще с той же проблемой, я пробовал несколько вещей, но ничего не помогает. - person woutr_be; 24.05.2012

Проверь это:

[self.tabBar setFrame:CGRectMake(self.tabBar.frame.origin.x, self.tabBar.frame.origin.y - 30, self.tabBar.frame.size.width, self.tabBar.frame.size.height + 30)];
person MatthewK    schedule 17.03.2014
comment
Это работает до тех пор, пока вы не выберете элемент на панели вкладок, а затем он сбрасывается. Как это решить? - person Matt Baker; 16.04.2014