【问题标题】:Custom rightBarButtonItem image自定义 rightBarButtonItem 图片
【发布时间】:2014-10-09 19:01:47
【问题描述】:

我正在尝试在我的 viewWillAppear 方法中使用此代码来使用自定义 rightBarButtonItem 图像:

    // Custom rightBarButtonItem
UIImage *buttonImage = [UIImage imageNamed:@"menu_button"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action: @selector(handleBackButton)
 forControlEvents:UIControlEventTouchUpInside];

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, buttonImage.size.width - 10, buttonImage.size.height - 10)];
[view addSubview:button];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:view];
self.navigationItem.rightBarButtonItem = customBarItem;

结果是这样的:

但我希望它更小,就像我在 Sketch 3 中设计的那样:

我需要做些什么来实现这一目标?

谢谢! 埃里克

【问题讨论】:

  • 您似乎只提供了一个视网膜资源,并且在非视网膜设备上运行。
  • @lan MacDonald 我在我真正的 iPhone 5s 上运行它,它有一个视网膜显示屏,不是吗?
  • 是的,iPhone 5s 有视网膜显示屏。我只是在评论它看起来的样子。我不是 100% 确定这里发生了什么导致您的图像显示不正确。

标签: ios objective-c uinavigationcontroller uinavigationbar uibarbuttonitem


【解决方案1】:

我认为您需要调整图像边缘插图:

[button setImageEdgeInsets:UIEdgeInsetsMake(topInset, leftInset, bottomInset, rightInset)];

【讨论】:

  • 不同的插图是什么?
  • 这取决于按钮图像的大小和按钮的大小。使用断点或 NSLog 输出按钮的宽度和高度。设置插图,使添加到图像非视网膜宽度的左右插图等于按钮的宽度。同样,添加到非视网膜图像高度的顶部和底部插图应等于按钮的高度。
  • 什么是嵌入
  • 你也可以只做实验。比较您提供的两张图片,看起来将顶部和底部插图设置为 6,而将边设置为 9 可能会起作用。
  • 我实验并发现了 9 和 10,所以我们彼此非常接近:P @Peter
【解决方案2】:

建议你像这样将UIIMage的渲染模式设置为UIImageRenderingModeAlwaysOriginal

UIImage *barButtonimage = [[UIImage imageNamed:@"menu_button"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

然后你可以设置 UIBarButtonItem 的图片如下

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage: barButtonimage style:UIBarButtonItemStylePlain target:self action:@selector(buttonAction:)];

UIImageRenderingModeAlwaysOriginal : 始终绘制原始图像,而不将其视为模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2012-04-27
    • 2012-11-10
    • 2013-08-28
    相关资源
    最近更新 更多