12

MFMailComposeViewController の UINavigationBar への半透明効果 (iOS 7) を削除する方法が見つかりませんでした。私のアプリの他のすべての UINavigationBars では問題ありません。

私は成功せずにこれを試しました:

MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
mailController.navigationBar.translucent = NO;

何か案が ?

4

4 に答える 4

1

少し遅れましたが、この投稿に出くわした人のために:

デフォルトでは、MFMailComposeViewController の navigationBar は半透明になり、これを変更することはできません。変更できるプロパティは、Appearance Proxy でサポートされているものだけです。アップルのドキュメントから:

このクラスのビュー階層はプライベートであり、変更してはなりません。ただし、UIAppearance プロトコルを使用して、インスタンスの外観をカスタマイズできます。

すべてのプロパティがサポートされているわけではないため、MFMailComposeViewController のナビゲーション バーの外観を変更するオプションは限られています (たとえば、[UINavigationBar の外観] setTranslucent:NO] のようなものを試した場合、このプロパティはプロキシによってサポートされていないため、クラッシュします)。 .

Appearance プロキシでサポートされているプロパティのリストは次のとおりです: https://gist.github.com/mattt/5135521

ここで、MFMailComposeViewController の navigationBar を非半透明に設定するには、backgroundColor を変更する必要があります (これは UIView 許可されたプロパティであり、UINavigationBar は UIView のサブクラスです)。

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];

MFMailComposeViewController をインスタンス化する前に、これを必ず実行してください。次に例を示します。

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

また、acearanceWhenContainedIn:MFMailComposeViewController を使用して、MFMailComposeViewController によって所有されている場合にのみ navBar に影響を与えることもできます。また、必要に応じて、mailComposeController:didFinishWithResult で以前の状態に戻すこともできます。

于 2014-09-26T17:27:17.410 に答える
0

Apple がその ViewController をあまりカスタマイズすることを望んでいないことをどこかで読んだと思いますが、それ以外に、ここで受け入れられている SO anser が役立つかもしれません: iOS 7 ステータスバーの MFMailComposeViewController は黒です

…タイミングの問題のため。

于 2013-12-02T15:58:06.650 に答える
0
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[self.navigationController presentViewController:mailVC animated:YES completion:^{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}];

グローバルに変更したくない場合:

MFMailComposeViewController にカテゴリを追加してみてください

@implementation MFMailComposeViewController (IOS7_StatusBarStyle)

-(UIStatusBarStyle)preferredStatusBarStyle
{
   return UIStatusBarStyleLightContent;
}

-(UIViewController *)childViewControllerForStatusBarStyle
{
   return nil;
}

@end
于 2014-07-30T10:47:24.820 に答える
0

これは、数行のコードに収まるものではありませんが、役に立つ可能性がある 1 つのアプローチです。

ナビゲーション バーを非表示にするには:

[[self navigationController] setNavigationBarHidden:YES animation:YES];

表示するには:

[[self navigationController] setNavigationBarHidden:NO アニメーション:YES];

この方法のドキュメントは、こちらから入手できます。

「ダブルクリック」またはダブルタップをリッスンするには、UIView をサブクラス化し、そのサブクラスのインスタンスをビュー コントローラーのビュー プロパティにします。

ビューのサブクラスで、その -touchesEnded:withEvent: メソッドをオーバーライドし、2 つの連続したタップ間の時間を (おそらく -timeIntervalSinceDate: を使用して) 測定することにより、一定期間内に取得したタッチ数をカウントします。または、[touch tapCount] の結果をテストします。

2 回タップすると、サブクラス化されたビューは、ビュー コントローラーがリッスンするように登録した NSNotification を発行します。

ビュー コントローラーが通知を受け取ると、ナビゲーション バーの isHidden プロパティを読み取ることによってアクセスされる、ナビゲーション バーの現在の表示状態に応じて、前述のコードを使用してナビゲーション バーを非表示または表示するセレクターを起動します。

于 2014-08-12T11:42:35.843 に答える