UIBarButtonItem的setAlpha在viewDidLoad中不起作用?

时间:2013-06-15 09:48:08

标签: ios objective-c uinavigationbar

我有一个带按钮的rightBarButtonItem。我在viewDidLoad中更改了按钮的alpha值,但它没有出现。为什么?如果我把它设置为任何动作(触摸事件)它的工作正常。如何解决这个问题以及为什么它不能在ViewDidLoad中工作?

3 个答案:

答案 0 :(得分:6)

UIKit会自动重置UIBarButtonItems的alpha值。要让它消失,您实际上需要通过将leftBarButtonItemrightBarButtonItem设置为nil来完全删除它。如果您只想要一些透明度,则需要将其设置为您将设置为barButtonItem背景的图像(为此,您可以使用appearance代理。

答案 1 :(得分:5)

可以设置UIBarButtonItem的alpha值。为此,您需要创建一个UIButton,然后将其设置为UIBarButtonItem的视图。这是一个例子:

UIButton *pauseButton = [UIButton buttonWithType:UIButtonTypeCustom];
[pauseButton setTitle:NSLocalizedString(@"pause", nil) forState:UIControlStateNormal];
[pauseButton sizeToFit];
[pauseButton addTarget:self action:@selector(pauseButtonClick) forControlEvents:UIControlEventTouchUpInside];
pauseButton.titleLabel.alpha = 0; /* set this alpha to whatever you like */
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:pauseButton];

答案 2 :(得分:1)

UIKit会自动设置customView UIBarButtonItem属性的alpha值,但您可以使用自定义类覆盖并强制执行所需的alpha。 (如果你想要一个半透明的按钮)。

// For use in UIBarButtonItem - UIKit resets the alpha of custom views automatically
final class HalfTransparentButton: UIButton {
    override var alpha: CGFloat {
        set { super.alpha = 0.5 }
        get { return 0.5 }
    }
}