默认皮肤适配暗黑模式

This commit is contained in:
2026-01-09 13:07:11 +08:00
parent 3d6d673c0b
commit ef332ecaa1

View File

@@ -31,8 +31,10 @@
// 375 稿
static const CGFloat kKBKeyboardBaseHeight = 250.0f;
static NSString * const kKBDefaultSkinId = @"normal_them";
static NSString * const kKBDefaultSkinZipName = @"normal_them";
static NSString * const kKBDefaultSkinIdLight = @"normal_them";
static NSString * const kKBDefaultSkinZipNameLight = @"normal_them";
static NSString * const kKBDefaultSkinIdDark = @"normal_hei_them";
static NSString * const kKBDefaultSkinZipNameDark = @"normal_hei_them";
static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
void *observer,
@@ -120,6 +122,15 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
[[KBBackspaceUndoManager shared] registerNonClearAction];
}
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (@available(iOS 13.0, *)) {
if (previousTraitCollection.userInterfaceStyle != self.traitCollection.userInterfaceStyle) {
[self kb_applyDefaultSkinIfNeeded];
}
}
}
- (void)textDidChange:(id<UITextInput>)textInput {
[super textDidChange:textInput];
[[KBInputBufferManager shared] updateFromExternalContextBefore:self.textDocumentProxy.documentContextBeforeInput
@@ -771,7 +782,25 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
if (skinId.length == 0 || [skinId isEqualToString:@"default"]) {
return YES;
}
return [skinId isEqualToString:kKBDefaultSkinId];
if ([skinId isEqualToString:kKBDefaultSkinIdLight]) {
return YES;
}
return [skinId isEqualToString:kKBDefaultSkinIdDark];
}
- (BOOL)kb_isDarkModeActive {
if (@available(iOS 13.0, *)) {
return self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark;
}
return NO;
}
- (NSString *)kb_defaultSkinIdForCurrentStyle {
return [self kb_isDarkModeActive] ? kKBDefaultSkinIdDark : kKBDefaultSkinIdLight;
}
- (NSString *)kb_defaultSkinZipNameForCurrentStyle {
return [self kb_isDarkModeActive] ? kKBDefaultSkinZipNameDark : kKBDefaultSkinZipNameLight;
}
- (UIImage *)kb_defaultGradientImageWithSize:(CGSize)size {
@@ -858,21 +887,24 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
NSString *currentId = [KBSkinManager shared].current.skinId ?: @"";
BOOL isDefault = (currentId.length == 0 || [currentId isEqualToString:@"default"]);
if (!isDefault && ![currentId isEqualToString:kKBDefaultSkinId]) {
return;
}
if ([currentId isEqualToString:kKBDefaultSkinId]) {
BOOL isLightDefault = [currentId isEqualToString:kKBDefaultSkinIdLight];
BOOL isDarkDefault = [currentId isEqualToString:kKBDefaultSkinIdDark];
if (!isDefault && !isLightDefault && !isDarkDefault) {
//
return;
}
NSString *targetId = [self kb_defaultSkinIdForCurrentStyle];
NSString *targetZip = [self kb_defaultSkinZipNameForCurrentStyle];
if (currentId.length > 0 && [currentId isEqualToString:targetId]) { return; }
NSError *applyError = nil;
if ([KBSkinInstallBridge applyInstalledSkinWithId:kKBDefaultSkinId error:&applyError]) {
if ([KBSkinInstallBridge applyInstalledSkinWithId:targetId error:&applyError]) {
return;
}
[KBSkinInstallBridge publishBundleSkinRequestWithId:kKBDefaultSkinId
name:kKBDefaultSkinId
zipName:kKBDefaultSkinZipName
[KBSkinInstallBridge publishBundleSkinRequestWithId:targetId
name:targetId
zipName:targetZip
iconShortNames:nil];
[KBSkinInstallBridge consumePendingRequestFromBundle:NSBundle.mainBundle
completion:^(__unused BOOL success, __unused NSError * _Nullable error) {