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


98

Зазвичай на кожній вкладці у UITabBarвас є невелике зображення та назва, що називає вкладку. Зображення розташоване / зосереджене у верхній частині вкладки для розміщення заголовка внизу. Моє запитання: якщо ви хочете мати вкладку з просто зображенням і без заголовка, чи є спосіб перенести зображення вниз, щоб воно було краще в центрі вкладки?

Зараз я використовую (див. Нижче):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

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

Відповіді:


179

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

Ціль-С

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властивість. Пограйте трохи з вставками, поки це не буде добре (залежно від зображень піктограми вкладки)


3
@Lukas: але це зменшує зображення.
— Sourabh Bhardwaj

1
@Sourabh не скорочує їх для мене
— TigerCoding

7
Фактичне значення вставки становить 5,5f, якщо вам потрібно, щоб він був ідеальним для пікселів.
— користувач

1
@ rr1g0 Переміщення значка у спеціальне положення неможливо. Якщо вам потрібна власна позиція значка або зовнішній вигляд значка, його потрібно виконати самостійно
— Лукас Кукацька,

1
@Sourabh вам доведеться змістити дно від'ємним значенням, щоб не зменшити зображення.
— Rmalmoe

150

Ви також можете зробити це через раскадровку. Виберіть свій таббаритем, перейдіть до інспектора розміру та призначте відповідні вставки.

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

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


приємно і чисто!
— ken

Кращий за всі відповіді ... Дякую вам @Neil Galiaskarov
— Venkatesh Chejarla

49

Складіть підклас 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)
}

це працювало для мене. тільки що для швидкого методу enumerateObjectsUsingBlock вже недоступний
— Junchao Gu

не підклас, замість цього помістіть це у свій AppDelegate
— Ласло

1
поставивши цей фрагмент в AppDelegateтеж працює, але це не очевидно , краще , ніж підкласів його. Ти можеш мати свої переваги :)
— Брайан,

10

Якщо ви використовуєте Xamarin, це працює:

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

10

Це працювало для мене

Швидкий 4

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

2

SWIFT 3.0

Ви можете встановити lnsets зображення, встановити верхній, лівий, нижній і правий у відповідності з потрібними.

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

2

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

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

Хороший підказок, який допоміг мені вирішити проблему, пов’язану з позицією зображення для елемента панелі вкладок на iPad та iOS 11. Але занадто суворо, щоб перекрити колекцію ознак на рівні контролера перегляду, краще підкласирувати клас UITabBar і переотримати властивість traitCollection там. Також повернення колекції ознак лише з горизонтальним класом знизить інші властивості колекції ознак. return UITraitCollection(traitsFrom: [ super.traitCollection, UITraitCollection(horizontalSizeClass: .compact)])зробив трюк для мене.
— Еммануель Париж

1

В Swift 4.2 , UIEdgeInsetsMakeє depricated, замість цього ми повинні використовувати UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.