【问题标题】:Custom Color for Nav Bar Button and StatusBar for UIActivityViewController导航栏按钮的自定义颜色和 UIActivityViewController 的状态栏
【发布时间】:2016-01-09 23:50:09
【问题描述】:

我有一个带有 ActionSheet 样式的 UIAlertController。有 2 个选项。当用户选择其中任何一个时,它会显示 Apple 内置的 UIActivityViewController。我遇到的问题是,当用户随后选择消息或邮件等时,导航栏按钮为深蓝色,状态栏为黑色。我希望按钮为白色,而状态栏为白色。唯一正常工作的是导航栏颜色是我在应用程序委托中设置的蓝色。

我在 App Delegate 中的代码:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // Nav Bar
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().opaque = true
    UINavigationBar.appearance().barTintColor = primaryBlueColor
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()

    // Status Bar
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
}

当我展示 UIActivityViewController 时,我可以将“取消”按钮的颜色自定义为自定义蓝色。但同样,当用户按下消息或任何其他选项时,它会转到一个新屏幕并且颜色不正确。这就是我所拥有的:

 let activityController = UIActivityViewController(activityItems: [textFile], applicationActivities: nil)

 self.presentViewController(activityController, animated: true, completion: nil)

 activityController.view.tintColor = primaryBlueColor

编辑问题 1:

我刚刚找到了将按钮更改为白色的答案。现在缺少的只是状态栏变成白色。这是我在上面的 App Delegate 方法中添加的内容。

 UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.classForCoder()]).tintColor = UIColor.whiteColor()

对状态栏有什么建议吗?

【问题讨论】:

    标签: ios objective-c swift uinavigationbar uiactivityviewcontroller


    【解决方案1】:

    在您的 AppDelegate 中,您可以删除:

        UIApplication.sharedApplication().statusBarHidden = true
        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent`
    

    接下来,将以下代码添加到您的 ViewController:

    extension UINavigationController {
    
       public override func preferredStatusBarStyle() -> UIStatusBarStyle {
           return .LightContent
       }
    
       public override func childViewControllerForStatusBarStyle() -> UIViewController? {
           return nil
       } 
    }
    

    最后,进入你的 Info.plist 并设置:

    View controller-based status bar appearance = YES

    【讨论】:

    • 有效!非常感谢。按钮颜色似乎存在一个问题。如果我单击消息,按钮是白色的。但是如果我点击邮件,按钮在出现的新屏幕上是蓝色的。知道为什么吗?
    • 尝试清理和重建。另外,对我来说,在我输入收件人地址之前,Mail 中的“发送”按钮是不带颜色的。还是您遇到的问题完全不同?
    • 我尝试清理和重建,但仍然一无所获。取消和发送按钮都是蓝色的。即使我开始打字,“发送”按钮也是蓝色的。至于消息,它是完美的。不确定这是否是一个单独的问题。知道为什么吗?你有这个问题吗?
    • 我没有遇到过这个问题。不过,它可能是您正在运行的代码中的其他内容。您是否在代码中的其他任何地方访问 MFMailComposeViewController()?
    • 是的,我有一个设置屏幕,因此用户可以发送电子邮件寻求支持。一切都非常适合该屏幕。这里有什么需要更改的吗?
    【解决方案2】:

    要将状态栏更改为白色,请在 swift 中转到 info.plist,然后按 + 并像这样编辑它:

    然后,将此行添加到AppDelegate.swift

     // Changing the status bar's colour to white
     UIApplication.sharedApplication().statusBarStyle = .LightContent
    

    【讨论】:

    • 抱歉,忘记在我的问题中添加该代码。我已经有了这个。我在上面编辑了我的问题。所以这段代码适用于每个屏幕,除非我按下 UIActivityViewController 然后选择像消息和邮件这样的选项。状态栏显示为白色,1 秒后变为黑色。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2017-03-26
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多