少し遅れましたが、この投稿に出くわした人のために:
デフォルトでは、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 で以前の状態に戻すこともできます。