IOS 当 navigationController 设置为 false 时,导航栏 tintColor 不会变白

IOS navigation bar tintColor wont turn white when navigationController is set to false

我的一个 Xcode 项目一直有问题。我试图隐藏 IOS 应用程序的导航栏,但在时间、运营商和电池 section/icons 上保留白色。如果我在 self.navigationController?.navigationBarHidden = false 中将 navigationController 设置为 false,我只能将色调变为白色 当它设置为 true 时,色调变为白色并且没有问题,但是导航栏是彩色的。这是我的代码。

import UIKit



class ViewController: UIViewController, UITextFieldDelegate {
    @IBOutlet weak var menuButton:UIBarButtonItem!

    @IBOutlet weak var emailTxt: UITextField!
    @IBOutlet weak var passwordTxt: UITextField!
    @IBOutlet weak var signinBtn: UIButton!
    @IBOutlet weak var signupBtn: UIButton!


    var varView = Int()



    override func viewDidLoad() {


        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        emailTxt.delegate = self

        let theWidth = view.frame.size.width
        let theHeight = view.frame.size.height

        emailTxt.frame = CGRectMake(40, 200, theWidth-80, 30)
        passwordTxt.frame = CGRectMake(40, 240, theWidth-80, 30)

        signinBtn.frame = CGRectMake(theWidth-228, 340, 59, 30)

         signupBtn.frame = CGRectMake(theWidth-228, 390, 59, 30)

        let nav = self.navigationController?.navigationBar
        nav?.barStyle = UIBarStyle.Black
        nav?.tintColor = UIColor.whiteColor()
        nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

        self.navigationController?.navigationBarHidden = true








        //maparea


    }



    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    //emailTxt.resignFirstResponder()
        self.view.endEditing(true)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func signInBtn(sender: AnyObject) {

        PFUser.logInWithUsernameInBackground(emailTxt.text!, password: passwordTxt.text!) {
            (user:PFUser?, error:NSError?) -> Void in

            if error == nil {

                print("logIn")
                self.performSegueWithIdentifier("gotoMainVCFromSigninVC", sender: self)

            } else {

                print("error")
            }

        }

    }

     }

在您的视图控制器中,您可以像这样覆盖 preferredStatusBarStyle

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

您的问题与导航栏无关。它与状态栏有关。您的状态栏是 lightContent,所以您会看到白色。您只需将其更改为 Default,您就会看得更清楚。

viewcontroller改变状态栏是:

  1. 将 UIViewControllerBasedStatusBarAppearance 设置为 YES .plist 文件。

  2. 在 viewDidLoad 中执行 [self setNeedsStatusBarAppearanceUpdate];

  3. 添加以下方法:

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

你的情况是导航,所以这样做:

self.navigationController.navigationBar.barStyle = .Default

希望对您有所帮助。

@adrianokw 的回答是针对一个 viewcontroller ,如果你想对整个应用程序这样做,请将以下内容添加到 info.plist

状态栏样式
UIStatusBarStyleLightContent

查看基于控制器的状态栏外观

更多信息here