美文网首页iOS表格绘制
iOS 状态栏、导航栏、TabBar高度适配

iOS 状态栏、导航栏、TabBar高度适配

作者: 樊二哈 | 来源:发表于2023-06-01 16:04 被阅读0次

Objective-C 版本

@interface UIDevice (VGAddition)

/// 顶部安全区高度
+ (CGFloat)safeDistanceTop;

/// 底部安全区高度
+ (CGFloat)safeDistanceBottom;

/// 顶部状态栏高度(包括安全区)
+ (CGFloat)statusBarHeight;

/// 导航栏高度
+ (CGFloat)navigationBarHeight;

/// 状态栏+导航栏的高度
+ (CGFloat)navigationFullHeight;

/// 底部导航栏高度
+ (CGFloat)tabBarHeight;

/// 底部导航栏高度(包括安全区)
+ (CGFloat)tabBarFullHeight;

@end
#import "UIDevice+VGAddition.h"

@implementation UIDevice (VGAddition)

/// 顶部安全区高度
+ (CGFloat)safeDistanceTop {
    if (@available(iOS 13.0, *)) {
        NSSet *set = [UIApplication sharedApplication].connectedScenes;
        UIWindowScene *windowScene = [set anyObject];
        UIWindow *window = windowScene.windows.firstObject;
        return window.safeAreaInsets.top;
    } else if (@available(iOS 11.0, *)) {
        UIWindow *window = [UIApplication sharedApplication].windows.firstObject;
        return window.safeAreaInsets.top;
    }
    return 0;
}

/// 底部安全区高度
+ (CGFloat)safeDistanceBottom {
    if (@available(iOS 13.0, *)) {
        NSSet *set = [UIApplication sharedApplication].connectedScenes;
        UIWindowScene *windowScene = [set anyObject];
        UIWindow *window = windowScene.windows.firstObject;
        return window.safeAreaInsets.bottom;
    } else if (@available(iOS 11.0, *)) {
        UIWindow *window = [UIApplication sharedApplication].windows.firstObject;
        return window.safeAreaInsets.bottom;
    }
    return 0;
}


/// 顶部状态栏高度(包括安全区)
+ (CGFloat)statusBarHeight {
    if (@available(iOS 13.0, *)) {
        NSSet *set = [UIApplication sharedApplication].connectedScenes;
        UIWindowScene *windowScene = [set anyObject];
        UIStatusBarManager *statusBarManager = windowScene.statusBarManager;
        return statusBarManager.statusBarFrame.size.height;
    } else {
        return [UIApplication sharedApplication].statusBarFrame.size.height;
    }
}

/// 导航栏高度
+ (CGFloat)navigationBarHeight {
    return 44.0f;
}

/// 状态栏+导航栏的高度
+ (CGFloat)navigationFullHeight {
    return [UIDevice safeDistanceTop] + [UIDevice navigationBarHeight];
}

/// 底部导航栏高度
+ (CGFloat)tabBarHeight {
    return 49.0f;
}

/// 底部导航栏高度(包括安全区)
+ (CGFloat)tabBarFullHeight {
    return [UIDevice statusBarHeight] + [UIDevice safeDistanceBottom];
}

@end

Swift 版本

import UIKit

extension  UIDevice  {

/// 顶部安全区高度
static  func  vg_safedistancetop()  ->  CGFloat  {
     if  #available(iOS 13.0,  *)  {
        let scene =  UIApplication.shared.connectedScenes.first
        guard  let windowScene = scene as?  UIWindowScene  else  {  return  0  }
        guard  let window = windowScene.windows.first else  {  return  0  }
        return window.safeAreaInsets.top
    }  else  if  #available(iOS 11.0,  *)  {
        guard  let window =  UIApplication.shared.windows.first else  {  return  0  }
          return window.safeAreaInsets.top
        }
              return  0;
          }

/// 底部安全区高度
static  func  vg_safedistanceBottom()  ->  CGFloat  {
    if  #available(iOS 13.0,  *)  {
        let scene =  UIApplication.shared.connectedScenes.first
        guard  let windowScene = scene as?  UIWindowScene  else  {  return  0  }
        guard  let window = windowScene.windows.first else  {  return  0  }
        return window.safeAreaInsets.bottom
  }  else  if  #available(iOS 11.0,  *)  {
          guard  let window =  UIApplication.shared.windows.first else  {  return  0  }
          return window.safeAreaInsets.bottom
  }
return  0;
}

/// 顶部状态栏高度(包括安全区)
static  func  vg_statusBarHeight()  ->  CGFloat  {
var statusBarHeight:  CGFloat  =  0
if  #available(iOS 13.0,  *)  {
let scene =  UIApplication.shared.connectedScenes.first
guard  let windowScene = scene as?  UIWindowScene  else  {  return  0  }
guard  let statusBarManager = windowScene.statusBarManager else  {  return  0  }
statusBarHeight = statusBarManager.statusBarFrame.height
}  else  {
statusBarHeight =  UIApplication.shared.statusBarFrame.height
}
return statusBarHeight
}

/// 导航栏高度
static  func  vg_navigationBarHeight()  ->  CGFloat  {
return  44.0
}

/// 状态栏+导航栏的高度
static  func  vg_navigationFullHeight()  ->  CGFloat  {
return  UIDevice.vg_statusBarHeight()  +  UIDevice.vg_navigationBarHeight()
}

/// 底部导航栏高度
static  func  vg_tabBarHeight()  ->  CGFloat  {
return  49.0
}

/// 底部导航栏高度(包括安全区)
static  func  vg_tabBarFullHeight()  ->  CGFloat  {
return  UIDevice.vg_tabBarHeight()  +  UIDevice.vg_safedistanceBottom()
}
}

相关文章

网友评论

    本文标题:iOS 状态栏、导航栏、TabBar高度适配

    本文链接:https://www.haomeiwen.com/subject/lpnuedtx.html