提示:Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410
问题原因
UIGraphicsBeginImageContext API 在 iOS17 已经被废弃了
解决方法
创建 Category 文件:新建文件 > Objective-C File
File:填写名称如Hook (实际文件名称YYAsyncLayer+Hook.h)
File Type:选择Category
Class:YYAsyncLayer (注意,YYKit为:YYAsyncLayer;YYText为:YYTextAsyncLayer)
建成文件示例,以 YYAsyncLayer 为例:
// .h 文件 #import "YYAsyncLayer.h" NS_ASSUME_NONNULL_BEGIN @interface YYAsyncLayer (Hook) @end NS_ASSUME_NONNULL_END
// .m 文件
#import "YYAsyncLayer+Hook.h"
@implementation YYAsyncLayer (Hook)
+ (void)load {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method a = class_getInstanceMethod(self, @selector(display));
Method b = class_getInstanceMethod(self, @selector(swizzing_display));
method_exchangeImplementations(a, b);
});
}
- (void)swizzing_display{
//通过变量名称获取类中的实例成员变量
if (self.bounds.size.width <=0 || self.bounds.size.height <=0) {
self.contents = nil;
return;
} else {
[self swizzing_display];
}
}
@end
注意⚠️:load 为类方法
重新运行,问题解决(最好是 Clean 项目,以及重启模拟器)。
如果Swift或者跟踪YYKit解决进度,请查看 https://github.com/ibireme/YYText/issues/984


文章评论