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

Posted

技术标签:

【中文标题】按钮的导航栏项目拉伸图像【英文标题】:Navigation Bar Item stretching image for button 【发布时间】:2013-04-29 16:47:45 【问题描述】:

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

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

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

图片在这里,它是 76x58(2x)。它是 38x29(正常)。

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

【问题讨论】:

【参考方案1】:

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];

【讨论】:

谢谢。我有一个后续问题,当在较小的高度等纵向时,导航栏项目是否应该使用不同的图像?【参考方案2】:

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

【讨论】:

您是如何将图像设置为 UIButton 的?您应该使用- (void)setImage:(UIImage *)image forState:(UIControlState)state,我尝试了这部分并且它正在工作。 另外,如果您不需要按钮上的自定义图像而只需要 + 图像,则可以将 UIBarButtonSystemItemAdd 用于 UIBarButtonItem。【参考方案3】:

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

【讨论】:

Frame 不是 UIBarButtonItem 的属性,我也无法 initWithFrame。我该怎么做?【参考方案4】:

Stuart,既然你有 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 兼容的解决方案

【讨论】:

谢谢,如何访问栏按钮项的字体?

以上是关于按钮的导航栏项目拉伸图像的主要内容,如果未能解决你的问题,请参考以下文章

更新整个项目的导航栏后退按钮图像

导航栏按钮项目“撰写”在转场期间向右移动

如何在左侧导航栏项目上添加圆形图像

导航栏背景图片太大

iOS 导航栏项目图片大小

导航左栏按钮项作为图像徽标