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

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

Сейчас я использую (см. ниже):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

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

Ответ 1

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

Objective-C

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

Swift

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

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

Ответ 2

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

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

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

Ответ 3

Создайте подкласс 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);
    }];
}

Swift 3:

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

Ответ 4

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

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

Ответ 5

SWIFT 3.0

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

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

Ответ 6

Для iOS 11 вам необходимо переопределить метод TraitCollection, кроме установки ImageInsets. Добавьте метод в класс подкласса UITabBarController

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