iOS 7.1中如何影响通过辅助功能设置启用的按钮形状外观?

7

在这里输入图片描述

iOS 7.1发布后,在辅助功能设置下提供了按钮形状的功能。然而,我注意到在我的应用程序中它们的外观可能存在不一致性。大多数情况下,我在使用Interface Builder实现UIBarButtonItem后会得到一个黑色背景。如果轻触按钮而不是完全点击它,则该图像将变为灰色。如何影响按钮形状的外观,使它们不会看起来格格不入,而像附图中显示的灰色背景呢?在这种情况下,我不想使用自定义控件。


请参考以下链接:https://dev59.com/gX3aa4cB1Zd3GeqPd4Dn#22345348 - Preetam Jadakar
这也是奇怪的行为,MrJ。目前似乎无法对这些按钮形状进行任何更改。 - Daniel Zhang
我的应用程序也出现了这个问题 - 我怀疑这是iOS 7.1中的一个错误(我的UIBarButtonItems是以编程方式创建的)。 - iPhoneDollaraire
我通过在AppDelegate中调用[[UINavigationBar appearance] setBarStyle:UIBarStyleDefault];成功解决了我的“隐藏”按钮(白色背景上的白色按钮)问题。 - MrJ
有人找到了自定义按钮形状的方法吗?我一直在苦苦寻找解决方案。我的应用程序中有些情况下,即使已经打开了设置,按钮形状也不会出现。 - The Guardian
显示剩余2条评论
3个回答

4

在iOS 7.1中,这个功能似乎有点故障。似乎最影响外观的设置实际上是在 UINavigationBar 上的 barTintColor

以下是一些例子:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UINavigationBar appearance] setBarTintColor:[UIColor lightGrayColor]];

    return YES;
}

当我第一次启动时,返回按钮看起来很好: enter image description here 然后当我转到横屏时,它看起来太暗了: enter image description here 当我回到竖屏时,它仍然太暗了: enter image description here 当使用[UIColor orangeColor]作为barTintColor时,也会发生同样的事情。首先它很好: enter image description here 在横屏模式下它变得混乱: enter image description here 然后它就一直保持这种状态: enter image description here 所以很明显这是iOS 7.1中的一个bug。可以做的一件事是为返回按钮设置一个背景图像。这个背景将显示“按钮形状”是否被激活。例如:
UIImage *backButtonImage = [[UIImage imageNamed:@"back_button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0f, 17.0f, 0.0f, 1.0f) resizingMode:UIImageResizingModeStretch];

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

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsLandscapePhone];

那么重要的问题是:当“按钮形状”被打开时,我们能否以一种独立于barTintColor的方式设置按钮背景图像?


2

-[UINavigationBar setTranslucent:NO] 可以解决这个问题。虽然我不知道为什么,但确实有效。

遗憾的是,我们无法使用 UIAppearance 设置 -[UINavigationBar setTranslucent:] ,因此必须在整个应用程序中进行设置。


有趣的是,我发现如果您进入“设置”>“通用”>“辅助功能”,然后打开“减少透明度” - 我的应用程序中所有与按钮形状相关的问题都会消失。这并不是真正的解决方法,但至少我可以告诉人们尝试一下,如果他们需要使用按钮形状。(我曾尝试在应用程序中将导航栏/工具栏设置为非半透明,但会导致一些布局问题...尽管我可能仍会探索该选项。) - Jim Rhoades

1
我遇到了一个问题,类似于这里的其中一个答案的评论所描述的问题,当我使用一种接近黑色的barTint颜色时。我的按钮形状背景在一些UINavigationBar 实例中几乎与barTint颜色相同,使它们几乎不可见(特别是当按钮未启用时)。我发现这些实例之间的区别在于UINavigationBar实例的barStyle属性的值。
当将barStyle设置为UIBarStyleDefault时,按钮形状将显示出背景颜色。当将barStyle设置为UIBarStyleBlack时,按钮形状将显示出浅色。您还可以从storyboard中注意到这一点,因为在默认样式下显示在导航栏中的标题为黑色,在黑色样式下显示为白色。
您可以在storyboard / NIB中更改每个导航栏的样式,或者您也可以在设置外观代理(通常在application:didFinishLaunchingWithOptions:中)时添加以下代码行。
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

barStyle 设置为 UIBarStyleBlack 对我也解决了这个问题。我使用了一个非常暗的背景图像,而不是设置 barTintColor。设置样式允许我继续使用深色图像。 - orkoden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接