[Swift]状态栏

1、获取状态栏高度

func statusBarHeight() -> CGFloat {
    var statusBarHeight: CGFloat = 44
    if #available(iOS 13.0, *) {
        let window = UIApplication.shared.windows.first
        statusBarHeight = window?.safeAreaInsets.top ?? 0
    } else {
        statusBarHeight = UIApplication.shared.statusBarFrame.height
    }
    return statusBarHeight
}

func isIPhoneX() -> Bool {
    return statusBarHeight() == 20 ? false : true
}

2、改变状态栏背景颜色


override func viewWillAppear(_ animated: Bool) {
    let statusView = statusBarUIView();
    statusView?.backgroundColor = UIColor.red;
}

// 获取状态栏背景视图
func statusBarUIView() -> (UIView?) {
    if #available(iOS 13,*) {
        let tag = 128901;
        guard let window = UIApplication.shared.delegate?.window else {
            return nil;
        }
        if let statusView = window?.viewWithTag(tag) {
            // 已经添加
            window?.bringSubviewToFront(statusView);
            return statusView;
        } else {
            // 未添加,现在添加
            let statusHeight = isIphoneX() ? 44 : 20;
            let statusBarRect = CGRect(x: 0, y: 0, width: Int(UIScreen.main.bounds.width), height: statusHeight);
            let statusBarView = UIView(frame: statusBarRect);
            statusBarView.tag = tag;
            window?.addSubview(statusBarView);
            return statusBarView;
        }
    } else {
        // 状态栏
        let statusWindow = UIApplication.shared.value(forKey: "statusBarWindow") as! UIView;
        let statusBar = statusWindow.value(forKey:"statusBar") as! UIView;
        return statusBar;
    }
}

还有这种通修改导航栏背景图片和颜色,达到修改状态栏背景一样的效果。但这种方式并不是修改的状态栏,若隐藏导航就会原形毕露。
导航栏的背景颜色

self.navigationController?.navigationBar.barTintColor = UIColor.blue;

导航栏的背景图片

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "guide1.jpg"), for: .any, barMetrics: .`default`);

3、改变状态栏文字颜色
没导航或导航已经隐藏的情况

// 样式
var style: UIStatusBarStyle = .lightContent; // .default
// 修改样式后可以主动触发来更新状态栏样式    
setNeedsStatusBarAppearanceUpdate();

// 重写statusBar相关方法
override var preferredStatusBarStyle: UIStatusBarStyle {
   return self.style
}

有导航栏时
这种方式导航栏的标题也会跟着改变颜色

let navigationBar = self.navigationController?.navigationBar;
navigationBar?.barStyle = .black; // .default
self.navigationController?.navigationBar.barTintColor = UIColor.blue;




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值