2016-05-03 14 views
3

カスタムアピアランス属性(カスタムフォント、色)を持つUINavigationBarにUIBarButtonItemがあります。これは通常、アプリ全体のほとんどの場所に表示されます。UIAlertControllerが表示されたときにUIBarButtonItemがカスタムアピアランス属性を失う

しかし、ActionSheetスタイルのUIAlertControllerがこのボタンを使用してビューコントローラ上に表示されると、BarButtonはカスタムフォントの外観を失い、ボタン上で不思議な「ジャンプ」と誤ったフォントが表示されます。ここに見ることができます:http://giphy.com/gifs/puopiq9mPyI2Q/html5。私はこれはおそらく、我々はAppDelegateで、次のコードで、BarButtonの外観を設定する方法に関連していると仮定し

NSDictionary *btnAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
            [UIColor  whiteColor],NSForegroundColorAttributeName, 
            [AppearanceConstants mediumFontSize20],   NSFontAttributeName,nil]; 
    [[UIBarButtonItem appearance] setTitleTextAttributes:btnAttributes forState:UIControlStateNormal]; 

私の推測では、バーボタンがUIControlStateNormalではないということでしょうが、しかしそれはdoesnのとにかく、AlertControllerが表示されているときにBarButtonがどの状態にあるのかを知るために、とにかく、すべてのコントロール状態に対してタイトルテキスト属性を適切な値に設定しようとしていたのはどちらもうまくいきませんでした。

NavigationBars内のBarButtonItemsを持つ他のView Controllerにナビゲートすると、正しい外観になります。後で問題のある画面に戻ると、AlertControllerが再び表示されるまで正しい外観になります。

+0

を助けるためにUIBarButtonItemにカテゴリを作成しActionSheet

UIAlertController *alertVC = ... [self presentViewController:alertVC animated:YES completion:^{ [self.navigationItem.leftBarButtonItem setDefaultAppearanceForSpecificItem]; [self.navigationItem.rightBarButtonItem setDefaultAppearanceForSpecificItem]; }]; 

を提示した後、スタイルをリセットコントローラまたは 'self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal'をあなたのアプリケーションデリゲートに追加します。他の投稿では、これを解決策として提案しています。 –

+0

提案していただきありがとうございます。問題を解決していないようです。これは実際にアクションシートに固有のものではなく、私はただ実現しました。私たちには、ビュー上に表示する別のビューコントローラがあり、同じ問題が発生しますが、背景をぼかすほど目立たないので、「ジャンプ」を見ることはできません。ただし、フォントスタイリングは削除されます。 –

答えて

2

私はあなたのビューで `self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal`を設定してみること私に

[self setTitleTextAttributes:@{ 
     NSFontAttributeName: [UIFont systemFontOfSize:14], 
     NSForegroundColorAttributeName: [UIColor VKBlueColor] 
} 
forState:UIControlStateNormal]; 
関連する問題