web-dev-qa-db-ja.com

[[UINavigationBar外観] setTranslucent:NO]がアプリをクラッシュさせるのはなぜですか?

this と同じ質問ですが、その質問は回避されました(NDAのため)であり、アクティブではありません。

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

これを最初のView ControllerのviewDidLoadで設定しています。 setTranslucentはオートコンプリートで表示され、クラッシュしてスウィズルなどについて話すまで文句を言いません。

これに関する情報は素晴らしいでしょう、私はまだアプリ全体で一貫したステータスバーの外観を得るのに非常に苦労しています。

38
user

translucentプロパティは、UIAppearanceを使用して設定することはできないようです。正確な理由はわかりませんが、一部のプロパティはサポートされていません。ただし、カスタムUIViewControllerを作成し、アプリ内の他のすべてのviewControllerをそのカスタムviewControllerのサブクラスにすることでこれを解決しました。そうすれば、アプリ内の他のすべてのviewControllerによって継承されるグローバルプロパティ(あなたの場合はtranslucentなど)を設定できます。私はそれが一種の大きな変化であることを知っていますが、それが役立つことを願っています。

**** [〜#〜] edit [〜#〜] ****

IOS 8では、UIAppearanceを使用して半透明性を設定できます。

客観的C

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

    [[UINavigationBar appearance] setTranslucent:YES];
}

Swift

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

    UINavigationBar.appearance().translucent = true
}
54
hgwhittle

ただし、存在しないイメージを指定することで、ツールバーを不透明にすることができます。

[[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];
8
JulianB

不正な方法を使用しているため、クラッシュします。 UIAppearanceには、

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

[[XXX appearance] method]を使用する場合、メソッドmethodには属性UI_APPEARANCE_SELECTORが必要です。そうでない場合は例外がスローされ、translucentには含まれません。

しかし、私を困惑させているのは、[[XXX appearance] method]はiOS8では大丈夫ですが、iOS7ではクラッシュし、Appleドキュメントはそれを言っていません。

2
Henson Fang

あなたの質問に対する答えがわかりません。Googleからここに来ましたが、Navigation Controllerを使用している場合、この行ですべての半透明度を変更できます。

[self.navController.navigationBar setTranslucent:NO];
2
okysabeni

クラスが初期化された後、半透明プロパティを変更することはできません。

[newsViewNavigationController.navigationBar setTranslucent:NO];

私はこのようなことをしましたが、うまくいきました!

0
Ali Tüzünkan