1

У меня есть панель навигации в раскадровке с UIBarButton справа.Панель навигации Пункт растягивающее изображение для кнопки

enter image description here

Это код, я использую, чтобы обновить изображение для этого:

// Setup the right navigation bar item 
[self.addGameButton setBackgroundImage:[UIImage imageNamed:@"addGameButton"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[self.addGameButton setTitle:@""]; 

Изображение здесь, это 76x58 (в 2 раза). Это 38x29 (при нормальном). enter image description here

При запуске устройства изображение растягивается, и я не знаю почему? enter image description here

ответ

4

Свойство backgroundImage предназначено для рисования растягиваемого изображения на фоне кнопки. Если вы хотите изображение внутри кнопки, вы можете попробовать инициализировать UIBarButtonItem с этим:

UIImage *image = [UIImage imageNamed:@"images/global/add"]; 
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil]; 
[self.navigationItem setRightBarButtonItem:barButtonItem]; 

Для вас, похоже, у вас есть изображение, которое вы хотите заменить всей кнопкой. Вы также можете попробовать этот код, который будет создавать пользовательские кнопки, как вид для вашего UIBarButtonItem:

UIImage *addImage = [UIImage imageNamed:@"images/global/add"]; 
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[addButton setFrame:CGRectMake(0, 0, addImage.size.width, addImage.size.height)]; 
[addButton setBackgroundImage:addImage forState:UIControlStateNormal]; 
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:addButton]; 
[self.navigationItem setRightBarButtonItem:barButtonItem]; 
+0

Спасибо. У меня есть вопрос о том, должно ли другое изображение использоваться для элемента навигационной панели, когда в портрете на меньшей высоте и т. Д.? – StuartM

0

Попробуйте установить рамку кнопки на нужный размер.

+0

Рама не является собственностью на UIBarButtonItem и я не могу initWithFrame либо. Как мне это сделать? – StuartM

1

В раскадровке вы можете перетащить UIButton через UIBarButtonItem, и вы можете настроить UIButton по своему усмотрению.

+0

Это не имеет значения – StuartM

+0

Как вы установили изображение в UIButton? Вы должны использовать '- (void) setImage: (UIImage *) образ forState: (UIControlState) state', и я пробовал эту часть, и она работает. – danypata

+1

Кроме того, если вы не хотите, чтобы пользовательский образ нажал на кнопку, и вы просто просматриваете изображение __ + __, вы можете использовать UIBarButtonSystemItemAdd для UIBarButtonItem. – danypata

0

Stuart, так как у вас есть setTitle: @ "" кнопка на панели навигации не отображает текст «добавить», а вместо этого занимает пространство, выделенное для текста. Я также должен найти правильное решение, но обходной путь для вашей проблемы - установить размер шрифта на 0,1f. Это позволит решить проблему ..

вам нужно настроить внешний вид панели навигации в «Приложение: didFinishLaunchingWithOptions» метод AppDelegate.m, попробуйте добавить следующий код:

UIImage *buttonback = [[UIImage imageNamed:@"nav_back"] 
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 22, 0, 0)]; 

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

    [[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary 
dictionaryWithObjectsAndKeys:[UIColor whiteColor], 
UITextAttributeTextColor, [UIFont fontWithName:@"verdana" size:0.1f], 
UITextAttributeFont, nil] forState:UIControlStateNormal]; 

Примечание Кроме того, что это будет работа с iOS 6, поиск решения для совместимости в iOS 5

+0

Спасибо, как мне получить доступ к шрифту для элемента кнопки? – StuartM

+0

@StuartM Я отредактировал свой ответ ... – Akshay

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