更改UIBarButtonItem视图以编程方式透明

Lan*_*ler 6 iphone transparency uinavigationbar opacity uibarbuttonitem

我无法让这个工作,我在网上看到了一个工作的例子.现在提供赏金,因为它让我疯狂.它应该很容易,但似乎并非如此.

我希望我的UINavigationBar上的按钮是半透明的,这样它们就可以显示UINavigationBar上的任何背景.在许多应用中可以看到这种效果,下面是图像示例.您可以通过在项目上设置自定义背景来实现这一点,我认为这是一个不可接受的解决方案,因为它要求您事先准备好图像,并且它们不适用于可变按钮等.它们看起来不像Apple UI和我不相信也有理由这样做,UIKit已经在为这些按钮绘制背景,我们只需要改变它.正确的解决方案使用Apple的apis生成的条形项和视图.

UIBarButtonItem不是UIView的子类.当您创建一个并将其添加到UINavigationBar时,框架中某处的某些代码会为其绘制视图.框架方法似乎抵制任何与允许条形项透明度相关的事情,例如tintColor属性.

例如,这不起作用:

 UINavigationItem *item = [[UINavigationItem alloc] init];
 UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"SUCKS" style:UIBarButtonItemStyleBordered target:self action:@selector(whatever:)];
editButton.tintColor = [UIColor colorWithWhite:0.4 alpha:0.3];
item.leftBarButtonItem = editButton;
Run Code Online (Sandbox Code Playgroud)

我所做的一切都不会让UINavigationBar为其条形项目提供半透明度.我相信在运行时我们需要:

  1. 获取条形图的图像
  2. 掩盖它的透明度
  3. 在条形项上设置新图像

但我无法在运行时获取图像或正确掩盖它.你怎么做到这一点?

像这样

ade*_*der 5

创建一个自定义uiview并在其中绘制一个半透明的黑色矩形,并将该视图与initWithCustomView一起使用.

看到

如果不这样做,您可能必须使用图像(png).例如1x1黑色像素png,不透明度为30%.然后你可以使用initWithImage.

编辑:我有第二种方法使用:

buttonThree = [[UIBarButtonItem alloc] initWithTitle:@" sort button " style:UIBarButtonItemStyleBordered target:self action:@selector(sortMethod)];
UIImage *thebgUIimage = [UIImage imageNamed:@"semi.png"];
[buttonThree setBackgroundImage:thebgUIimage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

这会生成一个按钮,该按钮具有导航栏背景图像显示的透明背景图像.但是,您需要创建一个带圆角的图像,因此每个按钮宽度需要一个图像.我在尝试上面的内容后也找到了这个帖子