与this相同的问题,但该问题被避开(因为当时的NDA)并且不再有效。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'
我在初始视图控制器的viewDidLoad
中进行设置。 setTranslucent
出现自动完成功能,并且在崩溃和讨论混音和事物之前不会抱怨。
任何关于此的信息都会很棒,我仍然非常难以在我的应用中获得一致的状态栏外观。
答案 0 :(得分:54)
似乎无法使用translucent
设置UIAppearance
属性。我不确切知道为什么,但我猜有些属性不受支持。但是,我通过创建自定义UIViewController
并使我的应用程序中的所有其他viewControllers成为该自定义viewController的子类来解决此问题。这样,我可以设置全局属性(例如您的translucent
),这些属性将由我的应用程序中的所有其他viewControllers继承。我知道这是一个很大的变化,但我希望它有所帮助。
**** 编辑 ****
从iOS 8开始,可以使用UIAppearance设置半透明度:
目标C
if([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
[[UINavigationBar appearance] setTranslucent:YES];
}
夫特
if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0 {
UINavigationBar.appearance().translucent = true
}
答案 1 :(得分: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];
答案 2 :(得分:2)
我不知道你的问题的答案,我从谷歌来到这里,但如果你使用导航控制器,我可以用这一行改变所有的半透明度:
[self.navController.navigationBar setTranslucent:NO];
答案 3 :(得分:2)
因为使用非法方法而崩溃。
在UIAppearance
,它说
To participate in the appearance proxy API, tag your appearance property selectors in your header with UI_APPEARANCE_SELECTOR.
这意味着当您使用[[XXX appearance] method]
时,方法方法必须具有属性UI_APPEARANCE_SELECTOR,否则它可能会抛出异常,translucent
没有它。
但让我感到困惑的是,在iOS8中[[XXX appearance] method]
它还可以,但在iOS7和苹果文档中崩溃并没有说出来。
答案 4 :(得分:0)
初始化类后,您无法更改半透明属性。
[newsViewNavigationController.navigationBar setTranslucent:NO];
我做了类似的事情并且有效!