IOS15 SVProgressHUD报错找不到Window
首先在ios11 引入SceneDelegate 场景配置文件。导致 SVProgressHUD找不到UIWindow,导致报错。
我们只需要在AppDelegate.h 添加一个强引用属性。
@property(nonatomic,strong)UIWindow *window;
此时就不报错了,
此时我们书写,SVProgressHUD相关api 接口的时候。
[SVProgressHUD showWithStatus:@"玩命加载中..."];
直接运行,细心的朋友可以观察到 提示框弹出来了,但是在屏幕的左上角。
demo
原因是SVProgressHUD 默认获取的还是系统的UIApplication, 我们直接修改源码,
找到 SVProgressHUD 第655行
定位到 positionHUD函数里面。
如果不想破坏系统原有的写法,可以加入版本判断。
#if !defined(SV_APP_EXTENSIONS) && TARGET_OS_IOS
UIWindowScene
* windowScene= (UIWindowScene *)[[[UIApplication sharedApplication] connectedScenes] allObjects].firstObject;
SceneDelegate *delegate = (SceneDelegate *)windowScene.delegate;
self.frame = delegate.window.bounds;
UIInterfaceOrientation orientation = UIApplication.sharedApplication.statusBarOrientation;
#elif !defined(SV_APP_EXTENSIONS) && !TARGET_OS_IOS
// self.frame= [UIApplication sharedApplication].keyWindow.bounds;
UIWindowScene
* windowScene= (UIWindowScene *)[[[UIApplication sharedApplication] connectedScenes] allObjects].firstObject;
SceneDelegate *delegate = (SceneDelegate *)windowScene.delegate;
self.frame = delegate.window.bounds;
我这里没加ios版本适配。
必须导入头文件。
#import "SceneDelegate.h"
可以直接通过CocoaPods管理,也可以直接下载源码导入。
demo