iOS 开发每天分享优质文章iOS汽车公司可能用到的知识点

IOS15 SVProgressHUD报错找不到Window

2021-12-18  本文已影响0人  Johnson_9d92

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
上一篇 下一篇

猜你喜欢

热点阅读