Я добавляю пользовательские кнопки навигации на панели навигации с помощью следующего кода.
//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 Display)
Однако кнопки выглядят искаженными на моем симуляторе (или на дисплее без сетчатки)
Как я могу решить это? Как правильно отобразить кнопки даже для дисплеев без сетчатки?
Обратите внимание, что для этого я также создал кнопки @ 2x
EDIT:
Вроде как проблема с растяжением изображения
UIImage *stretchableButtonImageNormal = [buttonImageNormal
stretchableImageWithLeftCapWidth:12 topCapHeight:0];
Если я изменю значение leftCapWidth на 0, кнопки на симуляторе будут выглядеть лучше (но все еще плохо).
Но при этом кнопка моего дисплея на сетчатке будет немного искажена (кажется, я не могу победить).
Кто-нибудь может посоветовать, действительно ли проблема здесь кроется, и как я могу изменить значения, чтобы она работала хорошо как для дисплеев сетчатки, так и для дисплеев без сетчатки?