1

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

在此处输入图像描述

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

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

图像在这里,它是 76x58(2x)。它是 38x29(正常)。 在此处输入图像描述

在设备上运行时,图像正在拉伸,我不知道为什么? 在此处输入图像描述

4

4 回答 4

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];
于 2013-04-29T18:12:22.597 回答
1

在情节提要中,您可以将 UIButton 拖到 UIBarButtonItem 上,并且可以根据需要自定义 UIButton。

于 2013-04-29T17:09:58.760 回答
0

尝试将按钮的框架设置为您想要的大小。

于 2013-04-29T16:51:21.537 回答
0

斯图尔特,因为你有 setTitle:@"" 导航栏按钮将不会显示文本“添加”,而是占用分配给文本的空间。我还没有找到合适的解决方案,但你的解决方法问题是将字体大小设置为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 兼容的解决方案

于 2013-04-29T17:21:26.267 回答