As we all know YYLabel
is no longer update. If your project is using YYLabel and has to adapt iOS13 DarkMode, it's a hard thing to do now.
This repo is using FluentDarkModeKit for it's core code, all you need to do is just initialize YYLabel+DarkModeKit
.
You can initialize in Appdelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[YYLabel config];
....
}
- If you are using
YYTextLayout
, just config Dynamic Color inNSMutableAttributedString
NSMutableAttributedString *demoStr = [[NSMutableAttributedString alloc] initWithString:@"lalala"];
[demoStr addAttribute:NSForegroundColorAttributeName value:[UIColor dm_colorWithLightColor:[UIColor redColor] darkColor:[UIColor blueColor]] range:NSMakeRange(0, demoStr.length)];
YYTextContainer *container = [YYTextContainer containerWithSize:CGSizeMake([UIScreen mainScreen].bounds.size.width, CGFLOAT_MAX)];
YYTextLayout *layout = [YYTextLayout layoutWithContainer:container text:demoStr];
- If you are using
NSMutableAttributedString
, you can code like above tips too
I'm using runtime swizzle method to monitor the textlayout and attributestring . When it is setted , find if there is Dynamic Color in AttributeString
and mark it.
Adopted FluentDarkModeKit Delegate . When DarkMode change , reset AttributeString's NSForegroundColorAttributeName
if it has Dynamic Color Mark
As we know , iOS CGColor
is not support Darkmode . If you set AttributeString like this:
attributeString.color = [xxxx]
//NSAttributeString+YYText.m
it won't work because it using CGColor
If you Modify source code , delete CGColor in .m , it can work Again!