2015-06-19 6 views
1

У нас есть «нижний бар» в нашем приложении, которое на данный момент является лишь UIView и определяется повсюду, что приводит к несогласованности и т.д. ...UIBarButtonItems с фоновыми изображениями

Я пытаюсь заменить использование этого с UIToolBar и UIBarButtonItems, поэтому я могу настроить внешний вид с помощью протокола UIAppearance.

Кнопки, которые мы используем на панели инструментов, имеют фоновое изображение, выполненное из изменяемого размера изображения (определенного в каталоге активов).

Что мы хотим, чтобы это выглядело как-то вроде этого ...

Desired result

Кнопки красиво по центру между верхней и нижней части панели инструментов.

Однако то, что происходит, когда я установить фоновое изображение с использованием протокола UIAppearance это ...

Actual result

Кнопки вертикально от центра.

Кажется, что текст находится в одном и том же месте, а фон применяется к тексту, но текст на самом деле ниже центра. Без BG это имеет смысл, но с BG это не работает.

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

Есть ли способ изменить это для всех экземпляров UIBarButtonItem в одном месте?

Я даже попытался добавить прозрачность к нижней части изображения, чтобы «подтолкнуть ее вверх», но это не повлияло.

Update, чтобы показать проблему на месте

В ENW проекте я встроить контроллер представления в навигации Controlle рэнд использовать этот код ...

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self.navigationController setToolbarHidden:NO animated:animated]; 
} 

- (NSArray *)toolbarItems 
{ 
    return @[ 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"Hello" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"World!" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithTitle:@"Goodbye!" style:UIBarButtonItemStyleDone target:nil action:nil], 
      [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil] 
      ]; 
} 

В результате ...

Default toolbar style

Затем я использую UIAppearance код ...

[[UIToolbar appearance] setTintColor:[UIColor whiteColor]]; 
[[UIToolbar appearance] setBarTintColor:[UIColor colorWithRed:0.15 green:0.2 blue:0.85 alpha:1.0]]; 

И результат ...

Blue toolbar with white tint colour.

Это выглядит нормально, но когда я добавить фоновое изображение ...

Resizable button image

С кодом ...

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"ToolBarButtonBackgroundEnabled"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

Я вижу thi s ...

Button backgrounds are below centre

Я попытался изменить настройку название позиции ...

[[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0, -5) forBarMetrics:UIBarMetricsDefault]; 

Но это только перемещает текст внутри кнопки ...

Buttons with offset titles

Это Безразлично» t переместите фон кнопки.

Я ничего не могу найти относительно смещения кнопок в виде панели инструментов.

Перемещение текста

Я был неправ о тексте остающейся междунар он же место. Текст перемещается при добавлении фона к элементам панели кнопок ...

Merged image of with and without background

Я слился скриншоты панели инструментов с и без кнопок фона. Вы можете видеть, что текст перемещается вниз.

ответ

0

Вы пробовали [xyzbtn setImageEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 10)]; или ваш размер изображения больше размера вашей кнопки, так что это может повлиять на макет.

+0

Я пробовал это, используя протокол UIAppearance, и он разбил приложение. – Fogmeister

0

Я заметил одно и то же: если вы установили фоновое изображение, UIBarButtonItem перемещается на 3pt. Он также перемещается вправо на 1pt.

Это, похоже, не происходит в iOS 11, что является хорошей новостью.

Мое предположение, что Apple предположила, что если у вас есть фоновое изображение, которое вы пытаетесь указать на состояние кнопки «выбрано», и они намеренно перемещают его кнопку вниз и вправо немного, чтобы дать 3-D вид движения.