有时候,需要在状态栏上显示一些自定义信息,比如新浪微博的官方iOS客户端:告知用户信息处于发送队列、发送成功或者发送失败。

如上图,通过在状态栏显示自定义信息,可以给用户友好又不影响软件使用的提示。

为此,我们显得定义一个自定义状态栏类,包含一个显示信息的Label:

@interface CustomStatusBar : UIWindow
{UILabel *_messageLabel;
}- (void)showStatusMessage:(NSString *)message;
- (void)hide;@end

接着,设置大小和系统状态栏一致,背景为黑色:

self.frame = [UIApplication sharedApplication].statusBarFrame;
self.backgroundColor = [UIColor blackColor];

到这里,为了让自定义的状态栏可以让用户看到,还需要设置它的windowLevel。

在iOS中,windowLevel属性决定了UIWindow的显示层次。默认的windowLevel为UIWindowLevelNormal,即0.0。

系统定义了三个层次如下,具体可参考官方文档:

const UIWindowLevel UIWindowLevelNormal;
const UIWindowLevel UIWindowLevelAlert;
const UIWindowLevel UIWindowLevelStatusBar;
typedef CGFloat UIWindowLevel;

为了能够覆盖系统默认的状态栏,我们把自定义的状态栏的windowLevel调高点:

self.windowLevel = UIWindowLevelStatusBar + 1.0f;

最后,为显示信息和隐藏添加一点无伤大雅的动画:

- (void)showStatusMessage:(NSString *)message
{self.hidden = NO;self.alpha = 1.0f;_messageLabel.text = @"";CGSize totalSize = self.frame.size;self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };[UIView animateWithDuration:0.5f animations:^{self.frame = (CGRect){ self.frame.origin, totalSize };} completion:^(BOOL finished){_messageLabel.text = message;}];
}- (void)hide
{self.alpha = 1.0f;[UIView animateWithDuration:0.5f animations:^{self.alpha = 0.0f;} completion:^(BOOL finished){_messageLabel.text = @"";self.hidden = YES;}];;
}

完整源码: https://github.com/siqin/CustomStatusBar

Jason Lee @ Hangzhou

Blog: http://blog.csdn.net/jasonblog

Weibo: @思禽饮霜

自定义iOS的状态栏相关推荐

  1. iOS 7状态栏在iPhone应用程序中恢复到iOS 6默认样式?

    本文翻译自:iOS 7 status bar back to iOS 6 default style in iPhone app? In iOS 7 the UIStatusBar has been ...

  2. ios 系统状态栏样式修改_超简单!!! iOS设置状态栏、导航栏按钮、标题、颜色、透明度,偏移等...

    原标题:超简单!!! iOS设置状态栏.导航栏按钮.标题.颜色.透明度,偏移等 1. 要实现以下这些效果都非常简单 2. 废话不多说,先看看实现效果 3. 下面告诉你我为什么说实现这些效果非常简单 比 ...

  3. iOS 设置状态栏样式

    iOS设置状态栏样式可以使用两种方式. 方式一: 直接在需要改变默认状态栏样式的控制器中实现一个方法(其他任何事情都不用做): // 返回状态栏的样式 - (UIStatusBarStyle)pref ...

  4. android通知栏样式自定义,如何给状态栏上的时钟自定义样式或位置?(位置篇)

    原标题:如何给状态栏上的时钟自定义样式或位置?(位置篇) 时间,是状态栏必不可少的空间之一.至于它的重要性和"电量"."信号"相比,哪个更重要.就由用户自行判断 ...

  5. ios 系统状态栏样式修改_iOS 设置状态栏样式

    iOS设置状态栏样式可以使用两种方式. 方式一: 直接在需要改变默认状态栏样式的控制器中实现一个方法(其他任何事情都不用做): // 返回状态栏的样式 - (UIStatusBarStyle)pref ...

  6. iOS 更改状态栏/导航栏颜色的几种实用方法

    实际开发需求: 这样代码之后 导航栏颜色白色,但是状态栏没有显示  这样写之后,导航栏和状态栏都是白色 一. 状态栏的设置 iOS上状态栏就是指的最上面的20像素高的部分,状态栏分前后两部分. 前景部 ...

  7. ios 系统状态栏样式修改_iOS 一种新的修改导航栏样式的方法(支持iOS10).

    iOS 一种新的修改导航栏样式的方法. 开宗明义: 对系统导航栏最底层的UIView加一层CALayer, 通过操作这个自己创建的CALayer来修改导航栏样式. 修改系统导航栏样式的几种方法 1.使 ...

  8. 自定义iOS导航栏背景,标题和返回按钮文字颜色-----转载自gyz413977349

    在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Col ...

  9. VCTransitionsLibrary –自定义iOS交互式转场动画的库

    简介 VCTransitionsLibrary 提供了许多适用于入栈,出栈,模态等场景下控制器切换时的转场动画.它本身提供了一个定义好的转场动画库,你可以拖到自己工程中直接使用;也提供了许多拥有不同转 ...

最新文章

  1. Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  2. 原来Github上也有这么多的JavaScript学习资源!
  3. oracle 约束 Oracle 10g学习系列(5)
  4. I NEED A OFFER!(HDU-1203)
  5. 阿里巴巴公布香港IPO定价:每股176港元
  6. 当今互联网从业者必看书籍 -- 《自传播》
  7. mysql 结果集换页_MySQL 按结果集分页
  8. 天若OCR文字识别软件
  9. knockout的监控数组实现 - 司徒正美
  10. 硬盘上出现0KB文件无法删除解决
  11. UE4 解决半透明材质显示错误
  12. 记录下我磕磕碰碰的三个月找工作经历,offer拿到手软
  13. 高斯滤波及高斯卷积核C++实现
  14. 举例:大学怎么过的一种思路
  15. ExtJS EditorGridPanel 示例之xml格式Store前后台增删改查
  16. 关于PolarCode方案被5G标准采纳这件事
  17. NLP入门_自然语言处理_AI分支
  18. java ssm基于springboot的通知反馈系统
  19. java 0l_关于java:[L数组符号-它来自哪里?
  20. 【原创】 ES5高效封装WIN10系统教程2020系列(五)常用软件安装及设置

热门文章

  1. 七参数坐标参数解算(MATLAB)
  2. python 基础学习 day6-字典
  3. cmd执行程序突然卡住解决办法
  4. 非常详细的Fiddler工具使用说明(包含APP抓包)
  5. 渗透测试工具之——HP WebInspect安装与使用
  6. 砼匠无人值守称重系统硬件图文设置
  7. vue 中后台系统解决方案vue-admin
  8. XCS10XL-4VQ100C介绍
  9. 软件开发中的QA主要做什么的
  10. 大数据行业如何获取高薪岗位offer?