Фоновое изображение кнопки "Назад" не появляется до того, как оно коснется iOS 7

У меня возникают проблемы с [UIBarButtonItem appearance] для фонового изображения кнопки назад.

Обычно (iOS 5 и iOS 6) мне удалось установить фоновое изображение задней кнопки следующим образом:

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

Но в iOS 7 фоновое изображение не появляется на задней панели. Странно, что фоновое изображение на самом деле появляется, когда обратная кнопка была затронута один раз.

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

Есть ли у вас какая-то идея, что я делаю неправильно?

Ответы

Ответ 1

Я искал эту проблему и обнаружил, что вы не единственный, у кого такая же проблема. Есть много других, которые сталкиваются с той же проблемой с UIAppearance. Это доказательства (чтобы объяснить вам ваш клиент):


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

Вы можете установить свойство backIndicatorImage на UINavigationBar на пользовательское изображение или изменить цвет backIndicatorImage, установив свойство tintColor на UINavigationBar.

Вы можете создать пользовательский UIBarButtonItem и вручную назначить его как UINavigationItem leftBarButtonItem.

Ответ 2

Решение, которое сделает фоновый рисунок корректным на iOS7, находится в пользовательской кнопке OS 7 OS. Он подгоняет метод исправления ошибки Apple (которая заключается в том, что они забывают вызвать setNeedsDisplay на закрытом представлении при изменении фонового изображения). Поездка без полей, вероятно, лучше, если это возможно, но swizzling действительно работает.

Ответ 3

попробуйте изменить цвет оттенка кнопки. В iOS 7 есть проблема в UIBarButton

Ответ 5

Для работы с ios7 вам необходимо использовать

    UIImage *backButton = [[UIImage imageNamed:@"icon_back" resizableImageWithCapInsets:UIEdgeInsetsZero];
if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) {
    [[UINavigationBar appearance] setBackIndicatorImage:backButton];
     [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButton];
}else{
//ios 5 and 6 code
}