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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 14获取iPhone的状态栏高度方法相关的知识,希望对你有一定的参考价值。

参考技术A 以前我们获取状态栏高度常用的宏定义

由于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的状态栏高度方法的主要内容,如果未能解决你的问题,请参考以下文章

iOS 14、15苹果手机状态栏高度

iOS 13后状态栏获取高度的方法

iOS 获取状态栏、导航栏、tabBar高度

iOS获取状态栏和导航栏尺寸(宽度和高度)

如何以编程方式获取 iOS 状态栏高度

iOS-导航栏、状态栏及Tabbar高度(区分iPhone X与其他iPhone机型)