it-roy-ru.com

Перемещение UITabBarItem Изображение вниз?

Обычно на каждой вкладке UITabBar у вас есть маленькое изображение и заголовок с названием вкладки. Изображение расположено/отцентрировано к верхней части вкладки, чтобы разместить заголовок внизу. Мой вопрос: если вы хотите, чтобы у вас была вкладка с изображением без заголовка, есть ли способ переместить изображение вниз, чтобы оно лучше центрировалось на вкладке?

Я использую (см. Ниже) в настоящее время:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

но я бы предпочел использовать более крупное изображение без заголовка, в настоящий момент, если я сделаю изображение больше, чем около 70 пикселей @ 2x, оно начнет обрезаться сверху UITabBar, оставляя много неиспользуемого пространства внизу.

86
fuzzygoat

Попробуйте настроить tabBarItem's imageInsets (для перемещения изображения значка) и установить для заголовка контроллера значение nil (чтобы заголовок не отображался). Поместите что-то вроде этого в метод -init или -viewDidLoad в контроллере представления:

Objective-C

self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;

Свифт

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil

UITabBarItem является подклассом UIBarItem, который имеет свойство UIEdgeInsets imageInsets. Немного поиграйте со вставками, пока они не будут хорошо выглядеть (в зависимости от ваших изображений на иконках вкладок)

159
Lukas Kukacka

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

 enter image description here

* Демонстрируется на XCode, версия 7.3.1 (7D1014)

127
Neil Galiaskarov

Создайте подкласс UITabBarController и в его viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
        vc.tabBarItem.title = nil;
        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
    }];
}

Свифт 3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
46
Brian

Если вы используете Xamarin, это работает:

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";
9
Jelle

Это сработало для меня

Swift 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
8
Alfi

Для iOS 11 вам нужно переопределить TraitCollection method отдельно от настройки ImageInsets. Пожалуйста, добавьте метод в ваш подклассный класс UITabBarController

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}
2
Prashant

Swift 3.0

Вы можете установить вставки изображения, установить верхнюю, левую, нижнюю и правую в соответствии с дизайном.

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
1
krish

В Swift 4.2 , UIEdgeInsetsMake запрещен, вместо этого мы должны использовать UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
0
Bappaditya