在iOS 7.1中,如何通过辅助function设置启用Button Shapes的外观?

在这里输入图像说明

iOS 7.1的发布带来了在可访问性设置下的button形状可用性。 我注意到,他们的外观可能会在我的应用程序不一致。 大多数情况下,在使用Interface Builder实现UIBarButtonItem后,我会变黑。 触摸button但不完全敲击会导致图像变灰。 如何影响button形状的外观,使其看起来不像黑色背景那样显得不合适,更像是所附图像中所示的灰色背景? 在这种情况下,我不想使用自定义控件。

这个function似乎是在iOS 7.1中的一个小错误。 似乎最能影响外观的设置其实就是UINavigationBar上的barTintColor

一些例子:

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

当我第一次启动时,后退button看起来很好:

在这里输入图像说明

然后当我去风景,看起来太黑暗:

在这里输入图像说明

然后,当我回到肖像时,它会保持太黑暗:

在这里输入图像说明

当我使用[UIColor orangeColor]作为barTintColor时,会发生同样的事情。 首先它很好:

在这里输入图像说明

在风景上它变得混乱:

在这里输入图像说明

然后保持这种状态:

在这里输入图像说明

所以它显然看起来像在iOS 7.1中的错误。 可以做的一件事就是设置后退button的背景图片。 这个背景会显示“Button Shapes”是否被激活。 例:

 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]; 

所以最大的问题是:我们可以设置button的背景图像,当“button形状”打开方式是独立于barTintColor

-[UINavigationBar setTranslucent:NO]似乎纠正这一点。 我不知道为什么,但确实如此。

唉,我们不能设置-[UINavigationBar setTranslucent:]使用UIAppearance所以不得不撒在应用程序周围。

我遇到了类似于在这里的答案的评论中描述的问题,同时使用相当接近黑色的barTint颜色。 我的button形状背景几乎与我的一些UINavigationBar实例上的barTint颜色相同,使得它们几乎不可见(特别是当button未被启用时)。 我跟踪了这​​些实例中的差异,成为UINavigationBar实例barStyle属性的值。

barStyle设置为UIBarStyleDefault ,button形状将显示为背景颜色。 将barStyle设置为UIBarStyleBlack ,button形状将显示为浅色。 您还可以在故事板中注意到这一点,因为导航栏中显示的标题将采用默认的样式显示为黑色,黑色显示为白色。

您可以在故事板/ NIB中更改每个导航栏的样式,或者您可以在设置外观代理(通常在application:didFinishLaunchingWithOptions:添加以下代码行:

 [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];