【问题标题】:Change status bar colours in MFMailComposeViewController through UIActivityViewController通过 UIActivityViewController 更改 MFMailComposeViewController 中的状态栏颜色
【发布时间】:2015-11-04 04:13:27
【问题描述】:

我正在尝试更改导航栏按钮的颜色、导航栏色调和文本颜色,但我似乎没有得到任何结果。 MFMailComposeViewController 是通过UIActivityViewController 激活的,我尝试了一些以前有效的不同方法(虽然不是通过UIActivityViewController)。

这是我当前的代码:

    UINavigationBar.my_appearanceWhenContainedIn(MFMailComposeViewController).barTintColor = UIColor.blackColor()

这是建议here。我也试过这个:

    activityVC.navigationController?.navigationBar.tintColor = UIColorFromRGB(0x0096FF)
    activityVC.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

我也想改变状态栏的颜色。

有人有什么想法吗?

更新:

我修复了按钮和标题的导航栏问题,但仍在寻找状态栏的解决方案。这样做不起作用:

    self.presentViewController(activityVC, animated: true, completion: { () in
        UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
    })

【问题讨论】:

    标签: ios swift uinavigationbar mfmailcomposeviewcontroller uiactivityviewcontroller


    【解决方案1】:

    您可以继承 MFMailViewController 并覆盖其 viewWillAppear 方法

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
        self.navigationController.navigationBar.translucent = false
        self.navigationController.navigationBar.opaque = false
        self.navigationController.navigationBar.barTintColor = UIColor.blueColor()
    }
    

    由于您只希望状态栏为lightcontent当 MFMailComposeViewController 处于活动状态时,您不应该将

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
    

    到您的应用程序中代表 didFinishLoading。这将为您的整个应用程序设置 lightContent。

    【讨论】:

    • 如果它解决了你的问题,你能把它标记为正确答案吗?
    【解决方案2】:

    对于 iOS8,你使用 barTintColor 来改变状态的颜色

        NSString *invitationText = @"test";
       [UINavigationBar appearance].barTintColor = [UIColor whiteColor];
       MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
       mc.mailComposeDelegate = self;
       [mc setSubject:@"Test "];
       [mc setMessageBody:invitationText isHTML:YES];
       [self presentViewController:mc animated:YES completion:NULL];
    

    【讨论】:

      【解决方案3】:

      转到您的应用委托文件并将这些行添加到您的 didFinishLaunchingWithOptions :) 它将更新所有视图控制器的状态栏颜色。

      UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
      

      另外在 info.plist 文件中添加一个名为“查看基于控制器的状态栏外观”的新键并将值设置为“否”

      更新

      要在视图之间设置不同的样式,试试这个:

      override func preferredStatusBarStyle() -> UIStatusBarStyle {
      return UIStatusBarStyle.LightContent
      }
      

      然后你可以根据你想要达到的目标返回亮或暗:)

      【讨论】:

      • 我有这个,但我需要视图控制器之间的状态栏样式不同。
      【解决方案4】:

      MFMailComposeViewController 设置自己的状态栏样式,您无权访问。您可能可以挖掘一些私有 API 来执行此操作,但您的应用肯定会被 Apple 拒绝。

      不过,作为旁注,您不应该更改 Apple 提供的 UIViewController(s) 的任何内容。它们看起来是这样的,因为它们是按照原始应用程序设计的。它旨在让用户了解应用程序中的位置和方向。 Apple 也可能会拒绝你的应用,因为你改变了他们的东西。

      【讨论】:

      • 虽然可能是这种情况,但我已经批准了许多其他应用程序,它们的功能完全相同,所以我不太担心它会被拒绝。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 2015-05-09
      • 2016-09-08
      • 2019-12-31
      相关资源
      最近更新 更多