代码之家  ›  专栏  ›  技术社区  ›  DevDevDev

我能要一个有彩色图像的uibarbuttonitem吗?

  •  32
  • DevDevDev  · 技术社区  · 15 年前

    我有一个图像,我想显示在一个uibarbuttonitem,但出于某种原因,它只显示轮廓,其余的都是白色的。我如何才能让它实际显示图像?

    谢谢!

    5 回复  |  直到 8 年前
        1
  •  62
  •   Community CDub    7 年前

    更新: MANIAK_dobrii's answer 要获得更简单的解决方案,请访问iOS 7+。


    以下是我如何使用uibarbuttonitem的图像:

    UIImage *image = [UIImage imageNamed:@"buttonImage.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
    [button setImage:image forState:UIControlStateNormal];
    [button addTarget:myTarget action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];    
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    …
    
        2
  •  52
  •   MANIAK_dobrii    10 年前

    还有其他iOS7+解决方案:

    NSString *iconFilename = // ...
    UIImage *image = 
        [[UIImage imageNamed:iconFilename] 
            imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    UIBarButtonItem *barButtonItem = 
        [[UIBarButtonItem alloc] initWithImage:image
                                         style:UIBarButtonItemStylePlain 
                                        target:self 
                                        action:@selector(onBarButtonItemTapped:)];
    

    从uiimage.h提取:

    …导航栏、选项卡栏、工具栏和分段控件自动将其前景图像视为模板…可以使用uiimagerenderingmodelwaystemplate强制始终将图像渲染为模板,或者uiimagerenderingmodelwaysoriginal强制始终将图像渲染为原始图像。

        3
  •  35
  •   Felipe Ferri    8 年前

    还有一种方法根本不涉及编码。

    首先,将要放置的图像放在assets.xcassets文档的栏上。

    在“资源”浏览器上选择图像。

    Select the image

    在右垂直工具栏上打开该图像的属性检查器。

    Attributes inspector

    在“渲染为”时,选择“原始图像”。

    Original Image

    即使在故事板上,按钮将继续被涂上淡色,当在模拟器上运行时,原始图像将被显示出来。

    Simulator

    图像的默认呈现模式因用户界面控件而异。但是,如果在属性检查器上设置此参数,则可以强制始终使用特定的渲染模式来表示图像。

    如果您需要在不同的控制器上用不同的渲染模式表示相同的图像,那么Maniak_-Dobrii的响应更合适。

        4
  •  8
  •   Kaptain    8 年前

    在SWIFT 3中:

    let iconname = // ...
    let image = UIImage(named: iconname)?.withRenderingMode(.alwaysOriginal)
    let barButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self. onBarButtonItemTapped))
    self.navigationItem.leftBarButtonItem = barButtonItem
    
        5
  •  7
  •   Wayne Hartman    13 年前

    不。你可以在里面读到 Human Interface Guidelines

    确定图标外观后,在创建图标时遵循以下准则:

    使用PNG格式。 使用纯白色和适当的alpha。 不包括投影。 使用消除混叠。 如果您决定添加一个斜面,请确保它是90度(为了帮助您完成此操作,请想象一个光源位于图标顶部)。 对于工具栏和导航栏图标,创建一个尺寸约为20 x 20像素的图标。 对于标签栏图标,创建一个尺寸约为30 x 30像素的图标。

    注意:为工具栏、导航栏和选项卡栏提供的图标用作创建在应用程序中看到的图标的遮罩。 不需要创建全色图标。