39

Same question as this, but that question was shunned (because of NDA at the time) and is no longer active.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'

I'm setting this in viewDidLoad of my initial view controller. setTranslucent comes up on autocomplete, and does not complain until crashing and talking about swizzles and things.

Any info on this would be great, I'm still having a very rough time getting a consistent status bar appearance across my app.

4

5 回答 5

55

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

****编辑****

从 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
}
于 2013-10-02T21:29:14.187 回答
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];
于 2013-11-05T17:18:37.530 回答
2

我不知道你的问题的答案,我是从谷歌那里得到的,但如果你使用导航控制器,我可以用这条线改变所有的半透明:

[self.navController.navigationBar setTranslucent:NO];
于 2014-03-14T22:19:12.007 回答
2

你崩溃是因为你使用了非法的方法。中UIAppearance,它说

To participate in the appearance proxy API, tag your appearance property selectors in your header with UI_APPEARANCE_SELECTOR.

意思是在你使用[[XXX appearance] method]的时候,methodmethod必须有属性UI_APPEARANCE_SELECTOR,否则可能会抛出异常,并且translucent没有。

但令我困惑的是,[[XXX appearance] method]在 iOS8 中它还可以,但在 iOS7 中崩溃并且苹果文档没有说明。

于 2015-04-04T05:27:34.493 回答
0

类初始化后不能更改半透明属性。

[newsViewNavigationController.navigationBar setTranslucent:NO];

我做了这样的事情,它奏效了!

于 2014-04-14T05:19:27.337 回答