图片在按钮中显示为空白

Posted

技术标签:

【中文标题】图片在按钮中显示为空白【英文标题】:picture appears as white space in button 【发布时间】:2013-04-10 21:36:31 【问题描述】:

我从免费图标 DB 下载了一个竖起大拇指图标,它的大小对于按钮来说太大而且它有白色背景。我决定在 pixelmator 中打开它,调整了图标的大小并删除了背景。使用预览打开它时看起来很棒,但是当它设置为 xcode 中的按钮图像时,它显示为一个白色圆圈。

这是编辑后的图标(30x30 png) 这就是它在按钮上的样子

我应该怎么做才能解决这个问题?

编辑/更新: 我尝试了@yunas 代码,它在导航栏中工作不适用于工具栏(甚至没有显示按钮)。

试试这个代码:

UIImage* image = [UIImage imageNamed:@"imageName"];
UIBarButtonItem *likeBtn = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(action_clicked:)];
NSArray* toolbarItems = [NSArray arrayWithObjects:likeBtn,nil];
self.toolbarItems = toolbarItems;
self.navigationController.toolbarHidden = NO;

再次生成带有白色绘图的按钮

所以我想知道:工具栏中是否可以有彩色按钮?也许我正在尝试不可能的事情......

edit/upadte II - 解决方案: 将 UIButton 包装在 UIBarButtonItem 中

@interface StatusUIBarButtonItem : UIBarButtonItem
- (id) initWithStatus: (enum StatusEnum)p_statusEnum;
@end

@implementation StatusUIBarButtonItem
- (instancetype)initWithStatus:(enum StatusEnum)p_statusEnum

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:[self getStatusImage] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(status_Clicked:) forControlEvents:UIControlEventTouchUpInside];
    [button setFrame:CGRectMake(0, 0, 20, 20)];

    self = [super initWithCustomView:button];
    if (self) 
    
        self.statusButton = button;
    
    return self;


@end

然后在 ViewController 类中:

-(void) viewDidLoad
  
    StatusUIBarButtonItem* stausBtn = [[StatusUIBarButtonItem alloc]  initWithStatus:self.status];
    NSArray* toolbarItems = [NSArray arrayWithObjects: stausBtn, nil];
    self.toolbarItems = toolbarItems;
    self.navigationController.toolbarHidden = NO;

我希望这会帮助像我一样想要工具栏中彩色图像的其他人

【问题讨论】:

你需要用customview设置uibarbuttonitem 这是一个 UIBarButtonItem 标识符:自定义样式:边框色调:默认 预期行为:“表示项目正常和突出显示状态的工具栏图像派生自​​您使用从 UIBarItem 类继承的图像属性设置的图像。例如,图像被转换为​​白色然后通过为正常状态添加阴影来斜切。” developer.apple.com/library/ios/#documentation/uikit/reference/… 【参考方案1】:
    UIImage *buttonImage = [UIImage imageNamed:@"imageName.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:buttonImage forState:UIControlStateNormal];
    button.adjustsImageWhenDisabled = NO;
    button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
    [button addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];

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

【讨论】:

您还应该将UIButtonshowsTouchWhenHighlighted 属性设置为YES @yunas 当然替换了 imageName,而不是 self.navigationItem.leftBarButtonItem = customBarItem; 我使用了 self.navigationController.toolbarItems = @[customBarItem]; 但按钮仍然像图片中一样出现一个写圆圈:( 我已将 leftbarbuttonitem 的代码更新为 rightbarbuttonitem,您不必执行 self.navigationcontroller.toolbaritems = @[custombaritem]。请从您的代码中省略这一行 @yunas 感谢您的帮助,您的代码在导航栏中工作,但我需要工具栏中的按钮(屏幕底部的栏)再次尝试这一行 self.navigationController.toolbarItems = @[customBarItem];没用

以上是关于图片在按钮中显示为空白的主要内容,如果未能解决你的问题,请参考以下文章

将网页保存为仅HTML,但是打开后一片空白

尽管设置了安全区域指南,但使用 XIB 显示的白色区域仍然显示空白区域

显示空白页的 Web 表单按钮

后退按钮在 React 中显示空白页

UIAlertController - 在警报中显示空白标题

word插入图片后为啥会多出一段空白,占用很大位置?看图