我正在尝试修改状态栏的外观(将文字设为白色/将样式设置为"灯光")。我设法通过将其添加到我的AppDelegate.swift文件来设置背景颜色:
let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
let statusBar = statWindow.subviews[0] as UIView
statusBar.backgroundColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
但是,当我去改变状态栏文本的样式时,甚至在General>下更改它。部署信息>状态栏样式(将其更改为" Light")不起作用。
我还尝试通过Info.plist修改状态栏,但是没有字段用于"查看基于控制器的状态栏外观" (见第二张图)。此外,没有选择"灯"状态栏样式选项下的样式(见下图):
状态栏样式选项:
没有视图控制器状态栏字段:
答案 0 :(得分:10)
您错过的步骤是Info.plist。
打开应用的info.plist文件,将 UIViewControllerBasedStatusBarAppearance 设置为否(如下所示)。
注意:如果以下情况不存在,则可以添加此密钥:
1)将鼠标悬停在现有条目上以显示添加/删除图标:
2)单击加号图标以添加新的键/值对:
3)将UIViewControllerBasedStatusBarAppearance
粘贴到关键字段中,并将其值设置为NO
。请注意,取消选中时,密钥将更改为View controller-based status...
,但它是相同的:
答案 1 :(得分:7)
在应用程序的每个UIViewController中,您应该覆盖preferredStatusBarStyle
属性:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
并最终致电:
<your controller>.setNeedsStatusBarAppearanceUpdate()
如果这个statusBar样式贯穿你的所有应用程序,你应该创建一个实现它的BaseViewController
类,并使你所有的视图控制器继承自BaseViewController。
答案 2 :(得分:7)
swift 3
如果在Info.plist中查看基于控制器的状态栏外观= YES
然后将此扩展名用于所有NavigationController
mWeekView.setEmptyViewClickListener(new
WeekView.EmptyViewClickListener() {
@Override
public void onEmptyViewClicked(Calendar time) {
String startTime = String.format("%02d:%02d",time.get(Calendar.HOUR_OF_DAY),time.get(Calendar.MINUTE));
time.add(Calendar.MONTH, 1);
String startdate = String.format("%d/%s/%s",time.get(Calendar.DAY_OF_MONTH),time.get(Calendar.MONTH)+1,time.get(Calendar.YEAR));
time.add(Calendar.MONTH, -1);
time.add(Calendar.MINUTE, 60);
String endtime = String.format("%02d:%02d",time.get(Calendar.HOUR_OF_DAY),time.get(Calendar.MINUTE));/*time.getTimeInMillis()+60*60*1000*/
Intent intent = new Intent(getActivity(),AddAppointment.class);
intent.putExtra("daystartdate", startdate);
intent.putExtra("daystartTime",startTime);
intent.putExtra("dayendtime",endtime);
startActivity(intent);
}
});
如果没有UINavigationController且只有UIViewController,那么使用下面的代码:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
目标c
创建类别类
对于UIViewController
在UIViewController + StatusBarStyle.h
中 extension UIViewController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
在UIViewController + StatusBarStyle.m
中 @interface UIViewController (StatusBarStyle)
@end
适用于UINavigationController
在UINavigationController + StatusBarStyle.h
中 #import "UIViewController+StatusBarStyle.h"
@implementation UIViewController (StatusBarStyle)
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
在UINavigationController + StatusBarStyle.m
中 @interface UINavigationController (StatusBarStyle)
@end
答案 3 :(得分:0)
对于Xcode 10,您可以简单地为UIViewController或UITableViewController ecc创建一个类。并将其放在您的UIViewController类之前,您可以在所有视图控制器中都需要调用此类的内容状态栏很浅...
class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}
在AppDelegate中设置状态栏:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().clipsToBounds = false
UINavigationBar.appearance().barStyle = .blackOpaque
return true
}
现在您使用UIViewControllerWithLightStatusBar更改类UIViewController
class YourViewController: UIViewControllerWithLightStatusBar {
...
}
就是这样...