Установить фоновое изображение UIBarButtonItem программно изменяет его размер

У меня был собственный UIBarButtonItem со встроенным uibutton через раскадровку. Это кнопка карты. см. параметры на этом скриншоте, мне пришлось использовать свойство background вместо Image.

кнопка панели карты

Но когда я попытался программно настроить некоторые uibarbuttons, кнопки стали меньше. У меня был тот же результат с кнопкой карты, когда я использовал свойство Image.

Вот код, который я пишу для кнопки возврата,

UIImage *backButtonImage = [[UIImage imageNamed:@"Retour.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(21, 21, 21, 21)] ;
backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth:0 topCapHeight:0];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
 button.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height);
[button setBackgroundImage:backButtonImage forState:UIControlStateNormal];
[button setBackgroundImage:backButtonImage forState:UIControlStateHighlighted];

[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithCustomView:button] ;
self.navigationItem.leftBarButtonItem = backBarButton;

Я пробовал использовать resizableImageWithCapInsets, stretchImageWithLeftCapWidth или без него с тем же результатом, что и ниже (кнопка возврата должна иметь тот же размер, что и кнопка карты)

Я пробовал также методы iOS 5 setBackButtonBackgroundImage, но кнопка вообще не была настроена.

панель инструментов навигации


person Omaty    schedule 22.07.2013    source источник


Ответы (2)


Если вы не нашли ответа на свою проблему, я могу предложить вам эту функцию:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize
{
    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

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

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

person zbMax    schedule 22.07.2013

Проблема заключалась в том, что я перезаписал [email protected] для дисплея Retina на Retour.png - _ _- '

person Omaty    schedule 22.07.2013