如何在iOS 7+上更改UIBarButtonItem的背景颜色?

17

我想表明一种特定的UIBarButtonItem可以通过改变其背景颜色来切换开或关。移动版Safari应用了这个功能来指示私人浏览是否开启或关闭:

Off On

既然UIBarButtonItem没有backgroundColor属性,那么我该如何做到这一点呢?

3个回答

31
创建一个UIButton,并将其用作UIBarButtonItem的自定义视图。然后,在按钮的图层上设置backgroundColor
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"Test"];
button.layer.backgroundColor = [UIColor redColor].CGColor;
button.layer.cornerRadius = 4.0;

UIBarButtonItem* buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.toolbarItems = @[buttonItem];

7
你还需要设置按钮的尺寸,否则它在iOS 7及以上版本中将无法显示。可以通过以下代码设置按钮的尺寸:[button setFrame:CGRectMake(0, 0, 80, 20)]; - noripcord
1
或者你可以让它自适应大小:[button sizeToFit]; - torinpitchers
2
有人知道为什么这对UINavigation UIBarButtonItems不起作用吗? - Rafthecalf

1
你可以使用两张图片,一张用于选中状态,一张用于未选中状态。
- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

上述函数应该能够帮助您做到这一点。

它适用于iOS 5.0及更高版本的UIBarButtonItem,并且似乎是当前唯一的解决方案(iOS 9.0)。 - EckhardN

0

Swift 5 答案

        let rightBarCancelButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
        let cancelImage = UIImage(systemName: "multiply")
        rightBarCancelButton.setImage(cancelImage, for: .normal)
        rightBarCancelButton.layer.cornerRadius = 15
        rightBarCancelButton.backgroundColor = UIColor.lightGray
        
        let rightBarButton = UIBarButtonItem(customView: rightBarCancelButton)
        navigationItem.rightBarButtonItem = rightBarButton

非常好用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接