按钮的导航栏项目拉伸图像
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 兼容的解决方案
【讨论】:
谢谢,如何访问栏按钮项的字体?以上是关于按钮的导航栏项目拉伸图像的主要内容,如果未能解决你的问题,请参考以下文章