This commit is contained in:
2026-03-04 10:20:22 +08:00
parent 72069cc737
commit 2a122d27a9
5 changed files with 67 additions and 13 deletions

View File

@@ -73,6 +73,9 @@ NS_ASSUME_NONNULL_BEGIN
@end
@interface KBKeyboardLayout : NSObject
@property (nonatomic, strong, nullable) NSNumber *rowSpacing;
@property (nonatomic, strong, nullable) NSNumber *topInset;
@property (nonatomic, strong, nullable) NSNumber *bottomInset;
@property (nonatomic, strong, nullable) NSArray<KBKeyboardRowConfig *> *rows;
@property (nonatomic, strong, nullable) NSArray<KBKeyboardRowConfig *> *shiftRows;
@end

View File

@@ -184,6 +184,9 @@ static NSString * const kKBKeyboardLayoutI18nFileName = @"kb_keyboard_layouts_i1
}
KBKeyboardLayout *mergedLayout = [KBKeyboardLayout new];
mergedLayout.rowSpacing = baseLayout.rowSpacing ?: layout.rowSpacing;
mergedLayout.topInset = baseLayout.topInset ?: layout.topInset;
mergedLayout.bottomInset = baseLayout.bottomInset ?: layout.bottomInset;
mergedLayout.rows = [self kb_mergeRowsFromBase:baseLayout.rows override:layout.rows];
mergedLayout.shiftRows = [self kb_mergeRowsFromBase:baseLayout.shiftRows override:layout.shiftRows];
mergedLayouts[key] = mergedLayout;

View File

@@ -835,6 +835,9 @@
"letters_bopomofo_full": {
"__comment": "繁体注音全键盘布局iOS 标准注音排列)",
"__comment_layout": "第一行:ㄅㄉˇˋㄓˊ˙ㄚㄞㄢㄦ | 第二行:ㄆㄊㄍㄐㄔㄗㄧㄛㄟㄣ | 第三行:ㄇㄋㄎㄑㄕㄘㄨㄜㄠㄤ | 第四行:ㄈㄌㄏㄒㄖㄙㄩㄝㄡㄥ",
"rowSpacing": 3,
"topInset": 5,
"bottomInset": 0,
"rows": [
{
"align": "left",

View File

@@ -45,7 +45,7 @@
[self addSubview:self.suggestionBar];
// /
CGFloat keyboardAreaHeight = KBFit(200.0f);
CGFloat keyboardAreaHeight = KBFit(215.0f);
KBKeyboardLayoutConfig *layoutConfig = [KBKeyboardLayoutConfig sharedConfig];
if (layoutConfig) {
CGFloat configHeight = [layoutConfig keyboardAreaScaledHeight];

View File

@@ -35,6 +35,11 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5;
@property (nonatomic, strong) KBKeyboardLayoutConfig *layoutConfig;
/// 0
@property (nonatomic, assign) CGFloat kb_uniformCharKeyWidth;
/// 便
@property (nonatomic, assign) CGFloat kb_currentRowSpacing;
/// /便
@property (nonatomic, assign) CGFloat kb_currentTopInset;
@property (nonatomic, assign) CGFloat kb_currentBottomInset;
@end
@implementation KBKeyboardView
@@ -82,11 +87,23 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5;
rows = @[[KBKeyboardRowConfig new], [KBKeyboardRowConfig new],
[KBKeyboardRowConfig new], [KBKeyboardRowConfig new]];
}
[self kb_rebuildRowContainersForRows:rows];
CGFloat rowSpacing = [self kb_rowSpacingForLayout:layout];
CGFloat topInset = [self kb_topInsetForLayout:layout];
CGFloat bottomInset = [self kb_bottomInsetForLayout:layout];
self.kb_currentRowSpacing = rowSpacing;
self.kb_currentTopInset = topInset;
self.kb_currentBottomInset = bottomInset;
[self kb_rebuildRowContainersForRows:rows
rowSpacing:rowSpacing
topInset:topInset
bottomInset:bottomInset];
}
/// / 4 5
- (void)kb_rebuildRowContainersForRows:(NSArray<KBKeyboardRowConfig *> *)rowConfigs {
- (void)kb_rebuildRowContainersForRows:(NSArray<KBKeyboardRowConfig *> *)rowConfigs
rowSpacing:(CGFloat)rowSpacing
topInset:(CGFloat)topInset
bottomInset:(CGFloat)bottomInset {
//
for (UIView *row in self.rowViews) {
[row removeFromSuperview];
@@ -97,9 +114,6 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5;
if (rowCount == 0) return;
KBKeyboardLayoutConfig *config = [self kb_layoutConfig];
CGFloat rowSpacing = [self kb_metricValue:config.metrics.rowSpacing fallback:nil defaultValue:8.0];
CGFloat topInset = [self kb_metricValue:config.metrics.topInset fallback:nil defaultValue:8.0];
CGFloat bottomInset = [self kb_metricValue:config.metrics.bottomInset fallback:nil defaultValue:6.0];
UIView *firstRow = nil;
UIView *previousRow = nil;
@@ -144,6 +158,9 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5;
[self.backspaceHandler bindDeleteButton:nil showClearLabel:NO];
KBKeyboardLayout *layout = [self kb_currentLayout];
CGFloat rowSpacing = [self kb_rowSpacingForLayout:layout];
CGFloat topInset = [self kb_topInsetForLayout:layout];
CGFloat bottomInset = [self kb_bottomInsetForLayout:layout];
NSLog(@"[KBKeyboardView] reloadKeys: layoutName=%@ rows=%lu shiftRows=%lu shiftOn=%d",
self.currentLayoutJsonId, (unsigned long)layout.rows.count, (unsigned long)layout.shiftRows.count, self.shiftOn);
@@ -159,8 +176,18 @@ static const CGFloat kKBLettersRow2EdgeSpacerMultiplier = 0.5;
(unsigned long)rows.count, (unsigned long)self.rowViews.count);
// 4 5
if (rows.count >= 4 && rows.count != self.rowViews.count) {
[self kb_rebuildRowContainersForRows:rows];
if (rows.count >= 4 &&
(rows.count != self.rowViews.count ||
fabs(self.kb_currentRowSpacing - rowSpacing) > 0.1 ||
fabs(self.kb_currentTopInset - topInset) > 0.1 ||
fabs(self.kb_currentBottomInset - bottomInset) > 0.1)) {
self.kb_currentRowSpacing = rowSpacing;
self.kb_currentTopInset = topInset;
self.kb_currentBottomInset = bottomInset;
[self kb_rebuildRowContainersForRows:rows
rowSpacing:rowSpacing
topInset:topInset
bottomInset:bottomInset];
}
//
@@ -1003,6 +1030,24 @@ edgeSpacerMultiplier:(CGFloat)edgeSpacerMultiplier {
return self.layoutConfig;
}
- (CGFloat)kb_rowSpacingForLayout:(KBKeyboardLayout *)layout {
KBKeyboardLayoutConfig *config = [self kb_layoutConfig];
NSNumber *layoutSpacing = layout.rowSpacing;
return [self kb_metricValue:layoutSpacing fallback:config.metrics.rowSpacing defaultValue:8.0];
}
- (CGFloat)kb_topInsetForLayout:(KBKeyboardLayout *)layout {
KBKeyboardLayoutConfig *config = [self kb_layoutConfig];
NSNumber *layoutInset = layout.topInset;
return [self kb_metricValue:layoutInset fallback:config.metrics.topInset defaultValue:8.0];
}
- (CGFloat)kb_bottomInsetForLayout:(KBKeyboardLayout *)layout {
KBKeyboardLayoutConfig *config = [self kb_layoutConfig];
NSNumber *layoutInset = layout.bottomInset;
return [self kb_metricValue:layoutInset fallback:config.metrics.bottomInset defaultValue:6.0];
}
- (KBKeyboardLayout *)kb_layoutForName:(NSString *)name {
return [[self kb_layoutConfig] layoutForName:name];
}