iOS 14获取iPhone的状态栏高度方法

以前我们获取状态栏高度常用的宏定义

#define StatusBar_HEIGHT     (DEVICE_IS_FULL_DISPLAY ? 44.: 20.)

由于iPhone12等机型状态栏高度不是固定的了,所以我们要动态取状态栏的高度。

        然而从iOS 14开始,全面屏iPhone的状态栏高度不一定是44了,比如下面就是这些设备在iOS 14.1上的状态栏高度。


        从iOS14开始StatusBar高度获取被弃用,需要使用UIStatusBarManager来获取statusBar的状态和属性,由于状态栏高度一般宏定义,常用工具类声明方法获取高度,宏定义时调用工具类方法获取,易读性高。我这里提供了OC版和swift两个版本的方法,供大家参考。

解决办法

根据不同系统,通过相应方法获取状态栏高度。

1、以下为Object-C的实现方法

+ (CGFloat)statusBarHeight {

    CGFloat statusBarHeight = 0;

    if (@available(iOS 13.0, *)) {

        statusBarHeight = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height;

    } else {

        statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

    }

    return statusBarHeight;

}


2、以下为swift的实现方法

先要获取当前的window,再去获取状态栏高度

func keywindows() ->UIWindow? {

        var window:UIWindow? =nil

        if #available(iOS13.0, *) {

            for windowScene:UIWindowScene in ((UIApplication.shared.connectedScenes as?  Set)!) {

                if windowScene.activationState== .foregroundActive{

                    window = windowScene.windows.first

                  break

                }

            }

            returnwindow

        }else{

            return  UIApplication.shared.keyWindow

        }

    }

以下为获取状态栏高度的方法

       var statusHeight  =0.0

        if#available(iOS13.0, *) {

            letcurrentWindow =keywindows()

            ifcurrentWindow!=nil{

                statusHeight =Double((currentWindow?.windowScene?.statusBarManager?.statusBarFrame.size.height)!)

            }

        }else{

            statusHeight =Double(UIApplication.shared.statusBarFrame.size.height)

        }

        print("ios status height========>", statusHeight)


欢迎大家加入QQ群一起交流学习:

464406500

你可能感兴趣的:(iOS 14获取iPhone的状态栏高度方法)