如何避免UIToolbar的tintColor更改UIButtonItem按钮颜色?

时间:2013-12-16 09:39:33

标签: ios uibarbuttonitem uitoolbar

在iOS7中,我创建了一个UIBarButtonItem和init,其图像颜色为绿色。但UIBarButtonItem图像的最终外观是具有相同形状但颜色不同的图像。颜色变为蓝色。

代码如下:

_recordVoiceItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"voiceIcon"] style:UIBarButtonItemStylePlain target:self action:nil];

    _textView = [[UITextView alloc] initWithFrame:CGRectMake(40, 4, 220, BOTTOM_BAR_HEIGHT - 2*4)];
    _textView.layer.borderWidth = 1.f;

    _rightItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"modeIcon"] style:UIBarButtonItemStylePlain target:self action:nil];

    _bottomBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.frame.origin.y + self.view.frame.size.height - BOTTOM_BAR_HEIGHT, self.view.frame.size.width, BOTTOM_BAR_HEIGHT)];

    _bottomBar.items = @[_recordVoiceItem,[[UIBarButtonItem alloc] initWithCustomView:_textView],_rightItem];

    [self.view addSubview:_bottomBar];

我尝试创建UIToolBar并通过Interface Builder添加一些项目。外观很好。 UIBarButtonItem图像的颜色是原始图像的颜色。

我怀疑我是否需要添加一些代码来设置UIToolBarUIBarButtonItem的某些属性,如果我想通过编写代码来设置它。你能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:16)

虽然它不应该是必需的,但是自iOS7以来我的彩色UIBarButtonItem完成了:

目标C

UIImage* itemImage= [UIImage imageNamed:@"menu.png"]; // Colored Image
itemImage         = [itemImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
_itemButton       = [[UIBarButtonItem alloc] initWithImage:itemImage style:UIBarButtonItemStyleBordered target:self action:@selector(itemSelected:event:)];

UIImageRenderingModeAlwaysOriginal 是此处的关键。

Swift 3

    // Use the colored image menu.png as a UIBarButtonItem
    if var itemImage   = UIImage(named: "menu") {
        itemImage      = itemImage.withRenderingMode(.alwaysOriginal)
        let itemButton = UIBarButtonItem(image: itemImage, style: .plain, target: self, action: #selector(self.itemSelected(_:)))

        self.navigationItem.rightBarButtonItem  = itemButton
    }

再次, withRenderingMode(.alwaysOriginal)是关键。

答案 1 :(得分:0)

您必须使用以下代码:

_bottomBar.transculantColor = No;
[_bottomBar setBackgroundColor:[UIColor clearColor]];