后退按钮的背景图像在触摸 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
并手动将其分配为UINavigationItem
的leftBarButtonItem
。
【讨论】:
【参考方案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 的默认后退按钮背景图像出现在我的自定义
UINavigationController 背景颜色更改在 iOS 中隐藏后退按钮