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
改变状态栏是:
将 UIViewControllerBasedStatusBarAppearance 设置为 YES
.plist 文件。
在 viewDidLoad 中执行 [self setNeedsStatusBarAppearanceUpdate];
添加以下方法:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
你的情况是导航,所以这样做:
self.navigationController.navigationBar.barStyle = .Default
希望对您有所帮助。
@adrianokw 的回答是针对一个 viewcontroller ,如果你想对整个应用程序这样做,请将以下内容添加到 info.plist
状态栏样式
UIStatusBarStyleLightContent
查看基于控制器的状态栏外观
否
更多信息here
我的一个 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
改变状态栏是:
将 UIViewControllerBasedStatusBarAppearance 设置为 YES .plist 文件。
在 viewDidLoad 中执行 [self setNeedsStatusBarAppearanceUpdate];
添加以下方法:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return .Default }
你的情况是导航,所以这样做:
self.navigationController.navigationBar.barStyle = .Default
希望对您有所帮助。
@adrianokw 的回答是针对一个 viewcontroller ,如果你想对整个应用程序这样做,请将以下内容添加到 info.plist
状态栏样式
UIStatusBarStyleLightContent
查看基于控制器的状态栏外观
否
更多信息here