问题:
由于iOS 26在 ScrollView 增加了虚化的边界
导致我的部分UI被虚化部分遮挡了。
其实这个获取高度的代码造成的
以前我们获取高度 但是这里灵动岛会有问题
旧代码
+ (CGFloat)statusBarHeight {
CGFloat statusBarHeight = 0;
if (@available(iOS 13.0, *)) {
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager;
statusBarHeight = statusBarManager.statusBarFrame.size.height;
} else {
statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
}
return statusBarHeight;
}
这里的返回值是 statusBarHeight = 54
正确来说 iOS16以后 灵动岛应该返回59
原因:
在iOS16 +
灵动岛机型上系统的 statusBarFrame 返回值 不是视觉上的实际高度,而是系统 API 认为的状态栏高度,通常是 54pt。
iOS 16 以后(灵动岛机型),statusBarFrame 不再等于顶部安全区高度,灵动岛区域比状态栏大,真实可用的顶部安全区(safeAreaInsets.top)更高。
所以我们需要用 safeAreaInsets.top 来获取顶部区域高度,而不是 statusBarFrame。
所以我们修改代码
修改后:
/// 顶部状态栏高度(包括安全区)
+ (CGFloat)AQ_statusBarHeight {
CGFloat height = 0;
if (@available(iOS 11.0, *)) {
UIWindow *window = UIApplication.sharedApplication.windows.firstObject;
height = window.safeAreaInsets.top; // 顶部安全区高度,灵动岛可达 59
} else {
height = [UIApplication sharedApplication].statusBarFrame.size.height;
}
return height;
}
/// 导航栏高度
+ (CGFloat)AQ_navigationBarHeight {
return 44.0f;
}
/// 状态栏+导航栏的高度
+ (CGFloat)AQ_navigationFullHeight {
return [UIDevice aq_statusBarHeight] + [UIDevice AQ_navigationBarHeight];
}
好,今日bug结束。
接下来的的任务,手机必须电充满,尿尿必须尿到清澈! 主打一个去公司添乱。