为什么[[UINavigationBar外观] setTranslucent:NO]崩溃我的应用程序?

use*_*ser 39 uinavigationbar ios7

同样的问题,但问题是(当时因为NDA)的回避,不再活跃.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'
Run Code Online (Sandbox Code Playgroud)

我正在设置viewDidLoad我的初始视图控制器.setTranslucent出现自动完成,并且在崩溃和谈论混合和事情之前不会抱怨.

有关这方面的任何信息都很棒,我仍然非常难以在我的应用程序中获得一致的状态栏外观.

hgw*_*tle 55

似乎该translucent属性无法使用UIAppearance.我不确切知道为什么,但我猜有些属性不受支持.但是,我通过创建自定义UIViewController并使我的应用程序中的所有其他viewControllers成为该自定义viewController的子类来解决这个问题.这样,我可以设置translucent将由我的应用程序中的所有其他viewControllers继承的全局属性(例如在您的情况下).我知道这是一个很大的改变,但我希望它有所帮助.

****编辑****

从iOS 8开始,可以使用UIAppearance设置半透明度:

目标C.

if([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {

    [[UINavigationBar appearance] setTranslucent:YES];
}
Run Code Online (Sandbox Code Playgroud)

迅速

if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0 {

    UINavigationBar.appearance().translucent = true
}
Run Code Online (Sandbox Code Playgroud)

  • iOS 8开始支持通过UIAppearance设置半透明度. (5认同)
  • 我最后只是手动设置每个视图控制器的半透明度.更快,但不像子类或定义协议那样干净. (3认同)

Jul*_*anB 8

你可以通过指定一个不存在的图像来欺骗它,这将使工具栏变得不透明

[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]];

[[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)