web-dev-qa-db-ja.com

iOS7でMFMailComposeViewControllerバーの背景色が変更されない

iOS7MFMailComposeViewControllerの-​​背景色を変更をしようとしていますが、機能させることができません。

私は次の省略形を使用しています:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;

if([picker.navigationBar respondsToSelector:@selector(barTintColor)]) {
    // iOS7
    picker.navigationBar.barTintColor = READER_NAVIGATION_BAR_BACKGROUND_COLOR;
    // Set back button arrow color
    [picker.navigationBar setTintColor:READER_NAVIGATION_BAR_BACK_BUTTON_ARROW_COLOR];

    // Set Navigation Bar Title Color
    [picker.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:READER_NAVIGATION_BAR_TITLE_NORMAL_FONT_COLOR forKey:UITextAttributeTextColor]];

    // Set back button color
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:READER_NAVIGATION_BAR_BUTTONS_FONT_COLOR, UITextAttributeTextColor,nil] forState:UIControlStateNormal];

} 

IOS7でMFMailComposeViewControllerの背景色を変更する方法を知っている人はいますか?

23
Manuel Escrig

これを試して。私のために働いた。

MFMailComposeViewController* myailViewController = [[MFMailComposeViewController alloc] init];
// set other attributes of mailcomposer here.
myMailViewController.mailComposeDelegate = self;

[myMailViewController.navigationBar setTintColor:[UIColor whiteColor]];

[self presentViewController:myMmailViewController animated:YES completion:nil];
32
gaurish.salunke

ここでの秘訣は、次のような「外観メソッド」を呼び出すことです。

[UINavigationBar appearance].barTintColor = [UIColor whiteColor];
[UINavigationBar appearance].tintColor = [UIColor redColor];

呼び出す前に

[[MFMailComposeViewController alloc] init];

このようにして、配色がMail Composerに適用されます。 mailComposeController:didFinishWithResult:でデフォルトに戻すことができます

70
SoftDesigner

Swift 3ソリューション:

extension MFMailComposeViewController {
    override open func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
    }

    open override func viewDidLoad() {
        super.viewDidLoad()
        navigationBar.isTranslucent = false
        navigationBar.isOpaque = false
        navigationBar.barTintColor = UIColor.white
        navigationBar.tintColor = UIColor.white
    }
}
17
mazorati

IOS8の場合:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

または

navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor yellowColor] forKey:UITextAttributeTextColor];
4
user4862433

@SoftDesignerの答え:

IOS 9以降:

[UINavigationBar appearance].tintColor = yourFavoriteColor;

mFMailComposeViewControllerでは機能しません。

残りの答えは機能します(私はそれを使用しました)が、私が知る限り、ナビゲーションバーボタンのAppleの色にこだわっています。

これが他の誰かの不安を救うことを願っています。

1
Peter

これを試してみてくださいが、iOS7でのみ利用可能なBarTintColor

[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];

この色は、translucentプロパティをNOに設定しない限り、デフォルトで半透明になります。

またはこのリンクを試してみてください

MFMailComposeViewControllerのツールバーの色を変更する

1
codercat

次のコードを試してください

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
    [[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]];

    // Your usual code follows here ......
1
Rajesh

最初にMFMailComposeViewControllerを提示し、次にtintColorを変更します

[self presentViewController:emailDialog animated:TRUE completion:nil];

[[UINavigationBar appearance] setBackgroundImage:nil 
                                  forBarPosition:UIBarPositionTopAttached 
                                      barMetrics:UIBarMetricsDefault];
0
Sunny Shah

背景色を設定できない問題がありました。背景画像を[UIImage new]に設定する他のコードがあることがわかりました。

次のコードで修正しました:

 [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
 [[UINavigationBar appearance] setShadowImage:nil];
0
Chris Birch