2014-02-21 2 views
2

Мы добавили UIBarButtonItem с помощью раскадровки и во время работы по клику мы хотели изменить свое изображение (функциональность похожа на добавление закладки/удалить закладку).iphone UIBarButtonItem: setBackgroundImage - растянуто

Исследовано переполнение стека .. много людей рекомендуется использовать UIButton внутри UIBarbuttonItem.

Ниже код изменяет изображение, но его растянуты (даже исходное изображение показывает, как растягиваются.

Можно ли вести нас для изменения изображения только с помощью UIBarButton (не используя UIButton)?

[_barButtonAddToFav setBackgroundImage:[UIImage imageNamed:@"ic_add_to_fav.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
+0

Здесь [ссылка] (http://stackoverflow.com/questions/7101608/setting-im). – user3182143

ответ

4

UIBarButtonItem расширит изображение целиком до области панели.

Чтобы решить эту проблему, перетащите UIButton внутри вашего UIBarButtonItem и установите изображение в UIButton.

Установите тип UIButton как пользовательский и все свойство, которое хотите установить для BarButton.

Он не растягивается, и вы также можете установить разрешение ширины и высоты так же, как и ваше изображение.

Надеюсь, его помощь. Пожалуйста, дайте мне знать, если нам нужно пойти с другим решением.

+0

Спасибо .. Пошел с таким подходом! –

+0

Пробовал другие способы, потому что я * действительно * хотел сделать это программно, но ни одно из решений, которые я нашел здесь или в других местах, не работал. Мне пришлось использовать этот метод и установить размер 'UIButton'. – dstudeba

0

AMOD вы можете попробуйте это coding.It все равно поможет.

UIImage *buttonImg = [UIImage imageNamed:@"myImg.png"]; 
UIImage *buttonGreyImg = [buttonImg stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 
[myButton setBackgroundImage:buttonGreyImg forState:UIControlStateNormal]; 
0

Кроме того, еще один код (ответ) на ваш вопрос

// Change the appearance of back button 
    UIImage *backButtonImage = [[UIImage imageNamed:@"button_back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

// Change the appearance of other navigation button 
    UIImage *barButtonImage = [[UIImage imageNamed:@"button_normal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)]; 
    [[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
+0

Спасибо @ user3182143 .. Пробовал выше, но все еще продолжал снимать изображение –

+0

Вы попробовали оба ответа? – user3182143

+0

Да пробовал оба варианта. Все еще растянутое изображение. Я пошел с опцией –

2

Я боролся с этим недавно, все решения кажутся запутанными, но оказывается, что это работает (по крайней мере, если исходное изображение, выделенное на раскадровке, такого же размера, как и новое изображение, - не уверен, что если бы они отличается):

barButton.image = (UIImage(named: "NewImage")) 
1

Dont использования: setBackgroundImage для UIBarButtonItem, а Инициализировать его следующий синтаксис инициализации с изображением

Это просто кнопка с изображением создания, которые никогда не будут растянутым.

self.navigationItem.hidesBackButton = true 
    let backButton = UIBarButtonItem(image: UIImage(named: "ico-nav-prev"), style: .Plain, target: self, action: #selector(viewController.back(_:))) 
    self.navigationItem.leftBarButtonItem = backButton 
Смежные вопросы