3

Я пытаюсь заменить по умолчанию нав бар обратно изображение кнопки:Replace Панель навигации кнопку назад, не растягивая

UIImage *backButtonImage = [UIImage imageNamed:@"back_button"] ; 

backButtonImage = [backButtonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, backButtonImage.size.width, 0, 0)]; 

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage 
                forState:UIControlStateNormal 
               barMetrics:UIBarMetricsDefault]; 

Что я получаю это: enter image description here

То, что я хочу это: enter image description here

Как? Исходное изображение - 11x44 балла.

EDIT: После применения этого

[UINavigationBar appearance].backIndicatorImage = backButtonImage; 
[UINavigationBar appearance].backIndicatorTransitionMaskImage = backButtonImage; 

я получаю это: enter image description here

Я провел часы, пытаясь получить стрелку, чтобы двигаться вниз так, что он выровнен вертикально текст заголовка в навигационная панель, но безрезультатно. Я видел другие темы с той же проблемой, но без решения. Почему это так сложно? Кажется, что все, кто заменит изображение кнопки «Назад», должны будут это решить.

+0

Вы должны поставить изображение как 1x, 2x, 3x –

+0

Конечно. изображение 2x составляет 22x88. [email protected] – soleil

ответ

4

Попробуйте этот код:

UIImage *backBtnIcon = [UIImage imageNamed:@"backNavIcon.png"]; 

if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)) { 
    [UINavigationBar appearance].backIndicatorImage = backBtnIcon; 
    [UINavigationBar appearance].backIndicatorTransitionMaskImage = backBtnIcon; 
} 
else{ 
UIImage *backButtonImage = [backBtnIcon resizableImageWithCapInsets:UIEdgeInsetsMake(0, backBtnIcon.size.width - 1, 0, 0)]; 
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -backButtonImage.size.height*2) forBarMetrics:UIBarMetricsDefault]; 
} 

Не забудьте поставить 3 изображения 1x, 2x @ и @ 3 раза в ваших активов изображения.

Пожалуйста, проверьте UIElements в документе apple for back button.

Спасибо!

+1

Интересно. Я никогда не слышал об этом. Это почти работает, но кнопка назад центрируется по вертикали в навигационной панели 64 px. Так как строка состояния занимает верхние 20 пикселей, мне нужно, чтобы изображение было вертикально центрировано в нижнем 44px навигационной панели. Есть ли способ сделать это или мне нужно сохранить изображение с высотой 64 пикселя? – soleil

+0

@soleil попытаться сделать некоторые изменения внутри resizableImageWithCapInsets Я думаю, вы можете это сделать. –

+1

Я тоже никогда не слышал о 'backIndicatorImage'. Спасибо, что поделились этим. – Anon

1

Вы можете создать новый UIImage с использованием базы данных CGContextRef на вашем изображении @ "back_button", нарисовать прозрачное пространство шириной 1 точки справа от него, чтобы вы могли позвонить по номеру resizableImageWithCapInsets:UIEdgeInsetsMake(0, backButtonImage.size.width - 1, 0, 0).

Смежные вопросы