iOS 7.1发布后,在辅助功能设置下提供了按钮形状的功能。然而,我注意到在我的应用程序中它们的外观可能存在不一致性。大多数情况下,我在使用Interface Builder实现UIBarButtonItem
后会得到一个黑色背景。如果轻触按钮而不是完全点击它,则该图像将变为灰色。如何影响按钮形状的外观,使它们不会看起来格格不入,而像附图中显示的灰色背景呢?在这种情况下,我不想使用自定义控件。
在iOS 7.1中,这个功能似乎有点故障。似乎最影响外观的设置实际上是在 UINavigationBar
上的 barTintColor
。
以下是一些例子:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UINavigationBar appearance] setBarTintColor:[UIColor lightGrayColor]];
return YES;
}
[UIColor orangeColor]
作为barTintColor
时,也会发生同样的事情。首先它很好:
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
的方式设置按钮背景图像?
-[UINavigationBar setTranslucent:NO]
可以解决这个问题。虽然我不知道为什么,但确实有效。
遗憾的是,我们无法使用 UIAppearance
设置 -[UINavigationBar setTranslucent:]
,因此必须在整个应用程序中进行设置。
barTint
颜色时。我的按钮形状背景在一些UINavigationBar
实例中几乎与barTint
颜色相同,使它们几乎不可见(特别是当按钮未启用时)。我发现这些实例之间的区别在于UINavigationBar
实例的barStyle
属性的值。barStyle
设置为UIBarStyleDefault
时,按钮形状将显示出背景颜色。当将barStyle
设置为UIBarStyleBlack
时,按钮形状将显示出浅色。您还可以从storyboard中注意到这一点,因为在默认样式下显示在导航栏中的标题为黑色,在黑色样式下显示为白色。application:didFinishLaunchingWithOptions:
中)时添加以下代码行。[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
barStyle
设置为 UIBarStyleBlack
对我也解决了这个问题。我使用了一个非常暗的背景图像,而不是设置 barTintColor
。设置样式允许我继续使用深色图像。 - orkoden
[[UINavigationBar appearance] setBarStyle:UIBarStyleDefault];
成功解决了我的“隐藏”按钮(白色背景上的白色按钮)问题。 - MrJ