MFMailComposeViewController栏背景颜色在iOS7中没有变化

时间:2014-02-04 08:52:12

标签: ios objective-c ipad ios7

我正在尝试更改 iOS7 MFMailComposeViewController的背景颜色,但我无法使其正常工作。

我正在使用以下剪辑:

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的bakcground颜色吗?

9 个答案:

答案 0 :(得分:68)

这里的诀窍是调用'外观方法',例如

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

在致电

之前
[[MFMailComposeViewController alloc] init];

这样,配色方案将应用于邮件编辑器。 它可能会返回到mailComposeController:didFinishWithResult:

中的默认值

答案 1 :(得分:32)

试试这个。为我工作。

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];

答案 2 :(得分:17)

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
    }
}

答案 3 :(得分:4)

对于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 :(得分:1)

试试这个,但BarTintColor只有一件事可用iOS7

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

默认情况下,此颜色为半透明,除非您将半透明属性设置为NO。

或尝试此链接会对您有所帮助

Changing MFMailComposeViewController's toolbar color

答案 5 :(得分:1)

尝试以下代码

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

    // Your usual code follows here ......

答案 6 :(得分:1)

@ SoftDesigner的回答:

从iOS 9开始:

[UINavigationBar appearance].tintColor = yourFavoriteColor;

不适用于MFMailComposeViewController。

答案的其余部分(我使用过它),但据我所知,你仍然坚持使用Apple的导航栏按钮颜色。

希望这可以让别人感到焦虑。

答案 7 :(得分:0)

首先显示MFMailComposeViewController然后更改其tintColor

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

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

答案 8 :(得分:0)

我遇到了一个阻止我设置背景颜色的问题。结果我在其他地方设置了其他代码将背景图像设置为[UIImage new]。

以下代码修复了它:

 [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
 [[UINavigationBar appearance] setShadowImage:nil];