我通过以下代码将自定义导航按钮添加到导航栏。
//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(带Retina显示屏的IOS5)上的导航按钮显示正常
然而,按钮看起来在我的模拟器(或非视网膜显示器)上变形
我该如何解决这个问题?即使对于非视网膜显示器,如何正确显示按钮?
请注意,我也为此创建了@ 2x按钮
编辑:
似乎问题与图像的拉伸相似
UIImage *stretchableButtonImageNormal = [buttonImageNormal
stretchableImageWithLeftCapWidth:12 topCapHeight:0];
如果我将leftCapWidth值更改为0,模拟器上的按钮看起来会更好(但仍然很糟糕)。
但通过这样做,它会使我的视网膜显示按钮看起来有点扭曲(似乎我不能赢)。
任何人都可以建议问题是否真的存在于此,以及我如何改变这些值以使其适用于视网膜和非视网膜显示器?
答案 0 :(得分:2)
你有两个文件吗? MyImage.png和MyImage@2x.png?看起来系统正试图通过缩小它来调整@ 2x文件的大小,这通常会导致一些像这样的锯齿状的缩小。
MyImage.png应该是MyImage@2x.png的一半大小。
答案 1 :(得分:1)
您没有设置文件格式.png或其他任何内容。正如克里斯所说,你需要常规的两个文件和@ 2x。