Я добавляю пользовательские кнопки навигации в свои панели навигации с помощью следующего кода.
//Instance method in CustomNavButton Class
-(UIButton*)setupButtonWithImage:(UIImage*)image andFrame:(CGRect)frame
{
UIButton *button = [[[UIButton alloc]initWithFrame:frame]autorelease];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake((frame.size.width-20)/2, (frame.size.height-20)/2, 20, 20)];
imageView.image = image;
UIImage *buttonImageNormal = [UIImage imageNamed:@"customBtn_black"];
UIImage *stretchableButtonImageNormal = [buttonImageNormal
stretchableImageWithLeftCapWidth:12 topCapHeight:0];
button.titleLabel.font = [UIFont boldSystemFontOfSize:12];
[button setBackgroundImage:stretchableButtonImageNormal
forState:UIControlStateNormal];
[button setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button addSubview:imageView];
return button;
}
//Call CustomNavButton and add to Navbar
- (void)viewDidLoad
{
[super viewDidLoad];
//Add left invite friends button
CustomNavButton *leftButton = [[CustomNavButton alloc]initWithImage:[UIImage imageNamed:@"friends_1"] andFrame:CGRectMake(0, 0, 40, 32)];
[leftButton.customNavButton addTarget:self action:@selector(inviteButtonPressed) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc]initWithCustomView:leftButton];
self.navigationItem.leftBarButtonItem = leftBarButton;
[leftButton release];
}
Кнопки навигации отображаются нормально на моем iPhone (IOS5 с дисплеем Retina)

Однако на моем симуляторе (или на дисплее без сетчатки) кнопки выглядят искаженными.

Как я могу решить эту проблему? Как я могу правильно отображать кнопки даже для дисплеев без сетчатки?
Обратите внимание, что для этого я также создал кнопки @2x.

РЕДАКТИРОВАТЬ:
Вроде как проблема с растягиванием изображения
UIImage *stretchableButtonImageNormal = [buttonImageNormal
stretchableImageWithLeftCapWidth:12 topCapHeight:0];
Если я изменю значение leftCapWidth на 0, кнопки на симуляторе будут выглядеть лучше (но все равно плохо).

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