UIBarButtonItem 外观我需要一个例外

Posted

技术标签:

【中文标题】UIBarButtonItem 外观我需要一个例外【英文标题】:UIBarButtonItem appearance I need an exception 【发布时间】:2012-07-16 17:25:14 【问题描述】:

在我的application:didFinishLauchginWithOptions: 中,我为我的控件设置了默认外观。

UIImage *transparentImage = [UIImage imageNamed:@"transparent.png"];

[[UIBarButtonItem appearance]setBackgroundImage:transparentImage 
                                       forState:UIControlStateNormal 
                                     barMetrics:UIBarMetricsDefault];

这对我来说非常有用,因为它为普通 UIBarButtonItems 提供了透明的平面外观。但是,当您按下“快速查看”时,UIDocumentInteractionController 会显示一个按钮 I,但外观不正确。

我相信这是我拥有的唯一一个只是图像的 barbuttonitem。有没有办法我可以修改这个按钮来给它一些对比,让它看起来不那么难看?即使是原始背景在我的导航栏背景下看起来也不错。

【问题讨论】:

【参考方案1】:

我最终实现了

documentInteractionControllerWillBeginPreview、documentInteractionControllerDidEndPreview

在 willBegin 中我保留右键并将 navigationItem 的右键设置为零。我这样做是因为在 didEnd 中视图已经显示,所以重置外观直到添加回来才会生效。

- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller

    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

    self.rightButton = self.navigationItem.rightBarButtonItem;
    self.navigationItem.rightBarButtonItem = nil;


- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller

    UIImage *transparentImage = [UIImage imageNamed:@"transparent.png"];
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundImage:transparentImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

    self.navigationItem.rightBarButtonItem = self.rightButton;

它并不完美,但比以前好多了。如果有人能弄清楚如何处理呈现控制器的rightBarButtonItem,我会接受你的回答。

【讨论】:

以上是关于UIBarButtonItem 外观我需要一个例外的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 外观 setTitleTextAttributes 不影响 UIControlStateDisabled 状态

通过外观为 UIBarButtonItem 设置背景图像不适用于其他 UIControlStates

使用多个导航栏视图自定义 UIBarButtonItem 外观

如何赋予 UIButton UIBarButtonItem 的外观

设备上的导航 UIBarButtonItem 外观不同

UIBarButtonItem 外观代理设置字体属性在 iOS 11 中不起作用