后退按钮的背景图像在触摸 iOS 7 之前不会出现

Posted

技术标签:

【中文标题】后退按钮的背景图像在触摸 iOS 7 之前不会出现【英文标题】:Background image of back button does not appear before it is touched iOS 7 【发布时间】:2013-09-25 08:07:44 【问题描述】:

我在使用[UIBarButtonItem appearance] 返回按钮背景图片时遇到了一些问题。

通常(ios 5 和 iOS 6)我可以像这样设置后退按钮的背景图像:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

但在 iOS 7 中,背景图像不会出现在后退按钮上。奇怪的是,当点击后退按钮一次时,背景图像实际上出现了。

我尝试为所有状态设置图像,以测试 iOS 7 是否为未触摸的后退按钮使用某种新状态,但似乎并非如此。

你知道我做错了什么吗?

【问题讨论】:

可以通过混合方法修复显示故障;请参阅我在 ***.com/a/19452709/1754225 的回复。但其他一些替代方案可能更可取。 不幸的是我也面临同样的问题。您对此有什么解决方案吗? 不,我没有。我必须创建一个自定义后退按钮作为UIButton 并将其设置为leftBarButtonItem 以解决它。 :-( 【参考方案1】:

OS 7 custom back button 是一个可以让背景在 iOS7 上正确显示的解决方案。它调配了一种修复 Apple 错误的方法(即当背景图像更改时,他们忘记在私有视图上调用 setNeedsDisplay)。如果可能的话,无边界可能会更好,但 swizzling 确实有效。

【讨论】:

【参考方案2】:

我搜索了这个问题,发现你不是唯一一个遇到同样问题的人。还有许多其他人面临与UIAppearance 相同的问题。这些是证明(向您的客户解释):

    UIBackButton Background Image not appearing Back button is not visible in iOS 7

在这种情况下,您可以按照第二个链接中提供的答案进行操作。

您可以将UINavigationBar 上的backIndicatorImage 属性设置为自定义图像,也可以通过设置UINavigationBar 上的tintColor 属性来更改backIndicatorImage 的颜色。

您可以创建自定义UIBarButtonItem 并手动将其分配为UINavigationItemleftBarButtonItem

【讨论】:

【参考方案3】:

尝试改变按钮的色调。 iOS 7 中的 UIBarButton 存在一些问题

【讨论】:

你能提供一些证据证明这个说法吗?我有同样的问题,我必须向客户解释。这就是我问你的原因:) 先自己尝试一下,如果有效,您也可以向客户解释【参考方案4】:

我在这里实现了一个非常好的解决方案,可以在 ios5+ 下运行:

Back button item strangely disappearing under iOS7

【讨论】:

【参考方案5】:

要使用 ios7,您需要使用

    UIImage *backButton = [[UIImage imageNamed:@"icon_back" resizableImageWithCapInsets:UIEdgeInsetsZero];
if ([UINavigationBar instancesRespondToSelector:@selector(setBackIndicatorImage:)]) 
    [[UINavigationBar appearance] setBackIndicatorImage:backButton];
     [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:backButton];
else
//ios 5 and 6 code

【讨论】:

以上是关于后退按钮的背景图像在触摸 iOS 7 之前不会出现的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 的默认后退按钮背景图像出现在我的自定义

更改导航栏后退按钮并删除标题以使其看起来像在 ios7 中

UINavigationController 背景颜色更改在 iOS 中隐藏后退按钮

iOS 7 NavigationBar 后退按钮自定义图像没有标签

自定义 UIButton 背景图像在点击之前不会出现

后退按钮与按钮轮廓一起出现