导航栏项目拉伸按钮的图像

时间:2013-04-29 16:47:46

标签: ios ios5 uinavigationcontroller uinavigationbar uinavigationitem

我在故事板中设置了导航栏,右侧是UIBarButton。

enter image description here

这是我用来更新图像的代码:

// Setup the right navigation bar item
[self.addGameButton setBackgroundImage:[UIImage imageNamed:@"addGameButton"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.addGameButton setTitle:@""];

图像在这里,它是76x58(2x)。它是38x29(正常情况下)。 enter image description here

在设备上运行时图像拉伸,我不知道为什么? enter image description here

4 个答案:

答案 0 :(得分:4)

backgroundImage属性用于为按钮的背景绘制可伸缩图像。如果您想要按钮内的图像,可以尝试使用以下方法初始化UIBarButtonItem:

UIImage *image = [UIImage imageNamed:@"images/global/add"];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil];
[self.navigationItem setRightBarButtonItem:barButtonItem];

对于您来说,您似乎想要用一个替换整个按钮的图像。您也可以尝试使用此代码,它将创建一个自定义按钮作为UIBarButtonItem的视图:

UIImage *addImage = [UIImage imageNamed:@"images/global/add"];
UIButton *addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[addButton setFrame:CGRectMake(0, 0, addImage.size.width, addImage.size.height)];
[addButton setBackgroundImage:addImage forState:UIControlStateNormal];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:addButton];
[self.navigationItem setRightBarButtonItem:barButtonItem];

答案 1 :(得分:1)

在故事板中,您可以在UIBarButtonItem上拖动UIButton,您可以根据需要自定义UIButton。

答案 2 :(得分:0)

尝试将按钮的框架设置为您想要的尺寸。

答案 3 :(得分:0)

Stuart,因为你有setTitle:@“”导航栏按钮不会显示文本“add”,而是占用分配给文本的空间..我还没有找到合适的解决方案但是您的问题的解决方法是将字体大小设置为0.1f。这将解决您的问题..

您需要在AppDelegate.m的“application:didFinishLaunchingWithOptions”方法中设置导航栏外观,尝试添加以下代码:

UIImage *buttonback = [[UIImage imageNamed:@"nav_back"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 22, 0, 0)];

    [[UIBarButtonItem appearance]
setBackButtonBackgroundImage:buttonback forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary
dictionaryWithObjectsAndKeys:[UIColor whiteColor],
UITextAttributeTextColor, [UIFont fontWithName:@"verdana" size:0.1f],
UITextAttributeFont, nil] forState:UIControlStateNormal];

另请注意,这适用于iOS 6,寻找兼容iOS 5的解决方案