我的应用程序背景较暗,但在iOS 7中,状态栏变得透明.所以我看不到任何东西,只有角落里的绿色电池指示灯.如何将状态栏文本颜色更改为白色,就像在主屏幕上一样?
我倾向于只将必需品(存储属性,初始化器)放入我的类定义中,并将其他所有内容移动到自己的extension类中,有点像extension我将与之合并的每个逻辑块// MARK:.
例如,对于UIView子类,我最终会得到与布局相关的东西的扩展,一个用于订阅和处理事件等等.在这些扩展中,我不可避免地必须覆盖一些UIKit方法,例如layoutSubviews.我从未注意到这种方法有任何问题 - 直到今天.
以此类层次结构为例:
public class C: NSObject {
public func method() { print("C") }
}
public class B: C {
}
extension B {
override public func method() { print("B") }
}
public class A: B {
}
extension A {
override public func method() { print("A") }
}
(A() as A).method()
(A() as B).method()
(A() as C).method()
Run Code Online (Sandbox Code Playgroud)
输出是A B C.这对我来说没什么意义.我读到有关静态分派的协议扩展,但这不是协议.这是一个常规类,我希望在运行时动态调度方法调用.显然,呼叫C至少应该动态调度和产生C?
如果我删除继承NSObject …
在我使用Xcode 5 for iOS 7构建的iPhone应用程序UIViewControllerBasedStatusBarAppearance=YES中info.plist,我设置了ViewController这个代码:
-(UIStatusBarStyle) preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)
但状态栏在黑色背景下仍然是黑色的.
我知道它可以通过设置这个程序范围的更改UIViewControllerBasedStatusBarAppearance=NO在info.plist,但我确实需要改变这种对viewController由viewController基础在运行时.
我可以使用类类别来覆盖已使用类别实现的方法吗?像这样:
1)原始方法
-(BOOL) method {
return true;
}
Run Code Online (Sandbox Code Playgroud)
2)覆盖方法
-(BOOL) method {
NSLog(@"error?");
return true;
}
Run Code Online (Sandbox Code Playgroud)
这会起作用,还是非法的?
我正在尝试将我的Swift应用程序中的状态栏颜色更改为白色,但是我碰到了一堵砖墙.我有3个ViewControllers,每个都嵌入在NavigationController中(可能是问题吗?我已经尝试将代码放在NavigationController类中.)我在AppDelegate的didFinishLaunchingWithOptions中尝试了以下两段代码. .swift文件,但都没有工作.
application.statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
和
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
Docs关于它的所有内容都是UIBarButtonStyle是一个Int并且给了我这个enum片段,这对我来说并没有任何帮助.
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
所以我以前用过:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent
animated:YES];
Run Code Online (Sandbox Code Playgroud)
动画状态栏样式的变化,从暗到亮,反之亦然
但是,自iOS 9起,此方法已弃用.
我更改为使用preferredStatusBarStyle以下@serenn的答案,而不是调用preferredStatusBarStyle
它确实可以改变旧式的状态栏样式,但没有动画.
文件说:
如果此方法的返回值更改,请调用setNeedsStatusBarAppearanceUpdate方法.
但是我不知道在哪里调用它,我试过把它放在viewWillAppear中,但没有运气.
preferredStatusBarUpdateAnimation 仍为默认值:UIStatusBarAnimationFade
所以我很困惑.寻找如何动画为已弃用方法的答案.提前致谢!
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Run Code Online (Sandbox Code Playgroud)
我使用这个在所有应用程序中将状态栏更改为亮.但现在我需要在一个View Controller中将其更改为黑色.我怎样才能做到这一点?
添加
application.statusBarStyle = .lightContent
Run Code Online (Sandbox Code Playgroud)
到我的AppDelegate的didFinishLaunchingWithOptions方法也没有添加
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
Run Code Online (Sandbox Code Playgroud)
到VC不再适用于iOS12/Xcode10
有任何想法吗?
我曾经setStatusBarStyle在我的项目中使用,它工作正常,但它已被弃用,所以我使用preferredStatusBarStyle,但没有用.知道我:
覆盖该功能
此函数未被调用
注意:我正在使用导航控制器.
我在这里阅读了很多帖子,并尝试了大多数提到的选项,但没有人为我解决问题.我有一个基于标签栏控制器的应用程序.每个选项卡都是一个UIViewController,顶部有一个导航栏.
将此代码添加到AppDelegate为我提供了带有白色文本的橙色导航栏,但是带有黑色文本的白色状态栏.
[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
Run Code Online (Sandbox Code Playgroud)
阅读各种页面上的答案建议将以下内容添加到View控制器:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Run Code Online (Sandbox Code Playgroud)
然后在View Did Load中调用它:
[self setNeedsStatusBarAppearanceUpdate];
Run Code Online (Sandbox Code Playgroud)
这让我得到一个带有白色文本的白色状态栏,我现在如何让状态栏变为橙色以匹配我的导航栏?
对于使用导航控制器的人来说,这里提到的解决方案/sf/answers/1365960011/不起作用,我想这是因为我的主控制器是一个标签栏控制器.
有没有人遇到过这个?提前感谢您提出的任何建议/建议.如果需要,我可以提供一个示例应用程序,但可能很快使用Tab Bar模板构建一个,添加导航栏然后粘贴我的代码示例.
等离子体
我想通过按下按钮将状态栏的颜色从白色更改为黑色,PROGRAMMATICALLY仅在单个ViewController中
这是代码:
- (UIStatusBarStyle)preferredStatusBarStyle {
NSLog(@"PreferredStatusBarStyle");
if(nav_bar.alpha==1)
{
NSLog(@"->UIStatusBarStyleBlackOpaque");
return UIStatusBarStyleBlackOpaque;
}
else
{
NSLog(@"->UIStatusBarStyleLightContent");
return UIStatusBarStyleLightContent;
}}
Run Code Online (Sandbox Code Playgroud)
然后,当我按下按钮动作是:
[self setNeedsStatusBarAppearanceUpdate];
Run Code Online (Sandbox Code Playgroud)
但这不起作用!
当我按下按钮日志时,根据navbar.alpha写入正确的状态,但状态栏文本颜色保持UIStatusBarStyleBlackOpaque,就像出现视图时一样.
我的视图控制器层次结构是SWRevealViewController-> UINavigationViewController-> MyController1。MyController1礼物MyController2使用self.present。MyController2不在内部UINavigationViewController并且演示文稿是模态的(设备是 iPhone)。In viewWillAppearof MyController2I call self.setNeedsStatusBarAppearanceUpdate(),但从preferredStatusBarStyle未被系统调用,状态栏外观保持不变(就像MyViewController1)。我在这里错过了什么吗?
编辑
info.plist将基于视图控制器的状态栏外观设置为YES
实施后UIViewController,状态栏内容的颜色似乎由于某种原因没有改变(仍然保持黑色)。仅使用特定的Swift 4.0,如何通过编程将其更改为“浅色”模式(白色)UIViewController?不是整个应用程序。
ViewController.swift类
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.blue
self.title = "Hello World"
self.navigationController?.navigationBar.barTintColor = UIColor.gray
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
self.navigationController?.navigationBar.largeTitleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .largeTitle)
]
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Run Code Online (Sandbox Code Playgroud)
jake.lange的建议
ios ×8
swift ×5
uistatusbar ×5
objective-c ×4
statusbar ×4
ios7 ×3
iphone ×2
xcode ×2
appdelegate ×1
categories ×1
ios12 ×1
swift2 ×1
swift4 ×1
textcolor ×1
uikit ×1
xcode10 ×1
xcode5 ×1
xcode6 ×1