Переміщення зображення 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.