diff --git a/VoidLink/Base.lproj/iPad.storyboard b/VoidLink/Base.lproj/iPad.storyboard
index 0e877a85..ba59c702 100644
--- a/VoidLink/Base.lproj/iPad.storyboard
+++ b/VoidLink/Base.lproj/iPad.storyboard
@@ -1791,7 +1791,7 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2280,6 +2300,8 @@
+
+
diff --git a/VoidLink/Base.lproj/iPhone.storyboard b/VoidLink/Base.lproj/iPhone.storyboard
index 6b56c9cc..95055c18 100644
--- a/VoidLink/Base.lproj/iPhone.storyboard
+++ b/VoidLink/Base.lproj/iPhone.storyboard
@@ -1903,7 +1903,7 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3062,6 +3082,8 @@
+
+
@@ -3112,16 +3134,16 @@
-
+
-
+
-
+
-
+
diff --git a/VoidLink/Database/DataManager.h b/VoidLink/Database/DataManager.h
index ee88a655..e297370c 100644
--- a/VoidLink/Database/DataManager.h
+++ b/VoidLink/Database/DataManager.h
@@ -153,6 +153,7 @@ typedef NS_ENUM(NSInteger, PencilTickMode) {
enableFrameTimebase:(BOOL)enableFrameTimebase
asyncFrameDequeue:(BOOL)asyncFrameDequeue
sdrPerformanceWorkaround:(BOOL)sdrPerformanceWorkaround
+ softKeyboardHeight:(CGFloat)softKeyboardHeight
backgroundSessionTimer:(NSInteger)backgroundSessionTimer;
- (NSArray*) getHosts;
diff --git a/VoidLink/Database/DataManager.m b/VoidLink/Database/DataManager.m
index be5570a2..02675d90 100644
--- a/VoidLink/Database/DataManager.m
+++ b/VoidLink/Database/DataManager.m
@@ -130,6 +130,7 @@
enableFrameTimebase:(BOOL)enableFrameTimebase
asyncFrameDequeue:(BOOL)asyncFrameDequeue
sdrPerformanceWorkaround:(BOOL)sdrPerformanceWorkaround
+ softKeyboardHeight:(CGFloat)softKeyboardHeight
backgroundSessionTimer:(NSInteger)backgroundSessionTimer{
__block Settings* settingsToSave = settings;
@@ -209,6 +210,7 @@
settingsToSave.mapControllerToMouse = mapControllerToMouse;
settingsToSave.controllerMousePointerVelocity = [NSNumber numberWithFloat:controllerMousePointerVelocity];
settingsToSave.controllerMouseExpo = [NSNumber numberWithFloat:controllerMouseExpo];
+ settingsToSave.softKeyboardHeight = softKeyboardHeight;
settingsToSave.rememberFoldState = rememberFoldState;
[self saveData];
}];
diff --git a/VoidLink/Database/TemporarySettings.h b/VoidLink/Database/TemporarySettings.h
index 213b40da..4847c18c 100644
--- a/VoidLink/Database/TemporarySettings.h
+++ b/VoidLink/Database/TemporarySettings.h
@@ -74,6 +74,7 @@
@property (nonatomic) BOOL statsOverlayEnabled;
@property (nonatomic) BOOL liftStreamViewForKeyboard;
@property (nonatomic) BOOL showKeyboardToolbar;
+@property (nonatomic) CGFloat softKeyboardHeight;
@property (nonatomic) BOOL unlockDisplayOrientation;
@property (nonatomic) BOOL enableGraphs;
@property (nonatomic) BOOL enableFrameTimebase;
diff --git a/VoidLink/Database/TemporarySettings.m b/VoidLink/Database/TemporarySettings.m
index e2d2158e..1328d6c6 100644
--- a/VoidLink/Database/TemporarySettings.m
+++ b/VoidLink/Database/TemporarySettings.m
@@ -119,6 +119,7 @@
self.slideToSettingsDistance = settings.slideToSettingsDistance;
self.liftStreamViewForKeyboard = settings.liftStreamViewForKeyboard;
self.showKeyboardToolbar = settings.showKeyboardToolbar;
+ self.softKeyboardHeight = settings.softKeyboardHeight;
self.touchMoveEventInterval = settings.touchMoveEventInterval;
self.touchPointerVelocityFactor = settings.touchPointerVelocityFactor;
self.mousePointerVelocityFactor = settings.mousePointerVelocityFactor;
diff --git a/VoidLink/Input/StreamView.m b/VoidLink/Input/StreamView.m
index 61e5a1f0..f97e8c45 100644
--- a/VoidLink/Input/StreamView.m
+++ b/VoidLink/Input/StreamView.m
@@ -69,6 +69,8 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
#if defined(__IPHONE_16_1) || defined(__TVOS_16_1)
UIHoverGestureRecognizer *stylusHoverRecognizer;
#endif
+ CGFloat designatedSoftKeyboardHeight;
+ bool keyboardHeightDesignatedForLandscape;
CGFloat HeightViewLiftedTo;
UILabel* keyboardToggleTip;
@@ -116,6 +118,9 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
keyboardToggleTip.layer.cornerRadius = 10;
keyboardToggleTip.clipsToBounds = true;
+ designatedSoftKeyboardHeight = settings.softKeyboardHeight * GenericUtils.screenHeight;
+ keyboardHeightDesignatedForLandscape = designatedSoftKeyboardHeight != 0;
+
// if(settings.touchMode.intValue == NativeTouchOnly) [self addGestureRecognizer:keyboardToggleRecognizer]; //keep legacy approach in pure native mode
// else [self->streamFrameTopLayerView addGestureRecognizer:keyboardToggleRecognizer]; //add to the superview in other modes
@@ -254,13 +259,13 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
NSDictionary *userInfo = notification.userInfo;
// Get the keyboard size from the notification
CGRect keyboardFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
- CGFloat screenHeight = CGRectGetHeight([[UIScreen mainScreen] bounds]);
- CGFloat keyboardHeight = keyboardFrame.size.height;
+ CGFloat screenHeight = GenericUtils.screenHeight;
+ CGFloat totalKeyboardHeight = keyboardFrame.size.height;
CGFloat toolbarHeight = settings.showKeyboardToolbar ? GenericUtils.legacyToolbarHeight : 0;
- if(keyboardHeight < screenHeight * 0.33333333333 + toolbarHeight
- || keyboardHeight > screenHeight*0.8 + toolbarHeight){
- keyboardHeight = screenHeight*0.5 + toolbarHeight;
+ if(totalKeyboardHeight < screenHeight * 0.33333333333 + toolbarHeight
+ || totalKeyboardHeight > screenHeight*0.8 + toolbarHeight){
+ totalKeyboardHeight = screenHeight*0.5 + toolbarHeight;
// [self toggleKeyboard];
/*
if(keyboardToggleRecognizer.lowestTouchPointHeight < screenHeight/2){
@@ -272,7 +277,17 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
}*/
}
- HeightViewLiftedTo = keyboardHeight - keyboardToggleRecognizer.lowestTouchPointHeight + CGRectGetHeight([[UIScreen mainScreen] bounds]) * 0.15; // lift the StreamView to the height of lowest touch point of multi-finger tap gesture, while reserving the view of 1/10 screen height for remote typing.
+ bool useDesignatedKeyboardHeight = false;
+ if (@available(iOS 13.0, *)) {
+ useDesignatedKeyboardHeight = GenericUtils.isLandscape && keyboardHeightDesignatedForLandscape;
+ totalKeyboardHeight = useDesignatedKeyboardHeight ? designatedSoftKeyboardHeight+toolbarHeight : totalKeyboardHeight;
+ }
+ else {
+ useDesignatedKeyboardHeight = keyboardHeightDesignatedForLandscape;
+ totalKeyboardHeight = useDesignatedKeyboardHeight ? designatedSoftKeyboardHeight+toolbarHeight : totalKeyboardHeight;
+ }
+
+ HeightViewLiftedTo = totalKeyboardHeight - keyboardToggleRecognizer.lowestTouchPointHeight + GenericUtils.screenHeight * (useDesignatedKeyboardHeight ? 0.1 : 0.15); // lift the StreamView to the height of lowest touch point of multi-finger tap gesture, while reserving the view of 1/10 screen height for remote typing.
if(HeightViewLiftedTo < 0) HeightViewLiftedTo = 0; // set HeightViewLiftedTo to 0 if it is high enough and not going to be covered by keyboard.
CGRect liftedStreamFrame = self.frame;
liftedStreamFrame.origin.y -= HeightViewLiftedTo;
diff --git a/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents b/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
index c6ae1e3c..069cb3e9 100644
--- a/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
+++ b/VoidLink/Limelight.xcdatamodeld/VoidLink v1.0.xcdatamodel/contents
@@ -98,6 +98,7 @@
+
diff --git a/VoidLink/Localization/Localizable.xcstrings b/VoidLink/Localization/Localizable.xcstrings
index acfa5490..100671d3 100644
--- a/VoidLink/Localization/Localizable.xcstrings
+++ b/VoidLink/Localization/Localizable.xcstrings
@@ -3167,6 +3167,29 @@
}
}
},
+ "Enter the relative height of the soft keyboard according to the scale (make sure app is in landscape fullscreen mode):" : {
+ "extractionState" : "manual",
+ "localizations" : {
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "按刻度输入软键盘的相对高度(请确保 App 运行在横向全屏状态):"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "按刻度輸入軟鍵盤的相對高度(請確保 App 運行於橫向全螢幕狀態):"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "按刻度輸入軟鍵盤的相對高度(請確保 App 運行於橫向全螢幕狀態):"
+ }
+ }
+ }
+ },
"Enter_PIN_Msg" : {
"extractionState" : "manual",
"localizations" : {
@@ -7961,6 +7984,35 @@
}
}
},
+ "softKeyboardHeightStackTip" : {
+ "extractionState" : "manual",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "The soft keyboard height obtained automatically by the system may be unreliable (especially with third-party keyboards), which can prevent the streaming view from being properly raised. Specifying the keyboard height can resolve this issue."
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "通过系统自动获取的软键盘高度可能不可靠(尤其是第三方输入法), 导致串流画面无法正确抬升,指定软键盘高度可解决此问题。"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "透過系統自動取得的軟鍵盤高度可能不可靠(尤其是第三方輸入法),可能導致串流畫面無法正確抬升,指定軟鍵盤高度可解決此問題。"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "透過系統自動取得的軟鍵盤高度可能不可靠(尤其是第三方輸入法),可能導致串流畫面無法正確抬升,指定軟鍵盤高度可解決此問題。"
+ }
+ }
+ }
+ },
"Squeeze Shortcut" : {
"extractionState" : "manual",
"localizations" : {
diff --git a/VoidLink/Utility/GenericUtils.swift b/VoidLink/Utility/GenericUtils.swift
index 41ce9b1a..47bc71fe 100644
--- a/VoidLink/Utility/GenericUtils.swift
+++ b/VoidLink/Utility/GenericUtils.swift
@@ -105,4 +105,86 @@ import Foundation
applyOffTintColor(sub)
}
}
+
+ static var kScaleLayerKey: UInt8 = 0
+ @objc static func setVerticalScale(view: UIView, show: Bool) {
+ // 移除旧的
+ if let oldLayer = objc_getAssociatedObject(view, &kScaleLayerKey) as? CALayer {
+ oldLayer.removeFromSuperlayer()
+ objc_setAssociatedObject(view, &kScaleLayerKey, nil, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+
+ guard show else { return }
+
+ let container = CALayer()
+ container.frame = view.bounds
+ container.contentsScale = UIScreen.main.scale
+
+ let step: CGFloat = 0.05
+ let totalSteps = Int(1.0 / step)
+
+ let path = UIBezierPath()
+
+ for i in 0...totalSteps {
+ let value = CGFloat(i) * step
+ let y = view.bounds.height * (1.0 - value)
+
+ let isMajor = i % 2 == 0
+ let lineLength: CGFloat = isMajor ? 10 : 5
+
+ // 刻度线
+ path.move(to: CGPoint(x: 0, y: y))
+ path.addLine(to: CGPoint(x: lineLength, y: y))
+
+ // 数值
+ if true {
+ let t = CATextLayer()
+ t.contentsScale = UIScreen.main.scale
+ t.font = UIFont.systemFont(ofSize: 13, weight: .medium)
+ t.fontSize = 13
+ t.foregroundColor = UIColor.red.cgColor
+ t.backgroundColor = ThemeManager.menuBackgroundColor.cgColor
+ t.alignmentMode = .left
+ t.string = String(format: "%.2f", value)
+ t.frame = CGRect(x: lineLength + 2, y: y - 7, width: 30, height: 14)
+
+ container.addSublayer(t)
+ }
+ }
+
+ let shape = CAShapeLayer()
+ shape.path = path.cgPath
+ shape.strokeColor = UIColor.red.cgColor
+ shape.lineWidth = 1
+
+ container.addSublayer(shape)
+
+ view.layer.addSublayer(container)
+
+ objc_setAssociatedObject(view, &kScaleLayerKey, container, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+ }
+
+ @objc static func toCGFloat(_ str: String) -> CGFloat {
+ return CGFloat(Double(str) ?? 0)
+ }
+
+ @available(iOS 13.0, *)
+ @objc static func isLandscape() -> Bool {
+ guard let windowScene = UIApplication.shared.connectedScenes
+ .compactMap({ $0 as? UIWindowScene })
+ .first(where: { $0.activationState == .foregroundActive })
+ else {
+ return false
+ }
+
+ return windowScene.interfaceOrientation.isLandscape
+ }
+
+ @objc static var screenWidth: CGFloat {
+ return UIScreen.main.bounds.width
+ }
+
+ @objc static var screenHeight: CGFloat {
+ return UIScreen.main.bounds.height
+ }
}
diff --git a/VoidLink/ViewControllers/SettingsViewController.h b/VoidLink/ViewControllers/SettingsViewController.h
index ba1fcec3..ef5e9179 100644
--- a/VoidLink/ViewControllers/SettingsViewController.h
+++ b/VoidLink/ViewControllers/SettingsViewController.h
@@ -16,7 +16,7 @@
#import "CustomEdgeSlideGestureRecognizer.h"
#import "MenuSectionView.h"
-@interface SettingsViewController : UIViewController
+@interface SettingsViewController : UIViewController
@property (strong, nonatomic) IBOutlet UINavigationBar *navigationBar;
@property (strong, nonatomic) UIStackView *parentStack;
@@ -216,6 +216,9 @@
@property (strong, nonatomic) IBOutlet UIStackView *passthroughGesturesStack;
@property (strong, nonatomic) IBOutlet UISwitch *passthroughGesturesSwitch;
+@property (weak, nonatomic) IBOutlet UIStackView *softKeyboardHeightStack;
+@property (weak, nonatomic) IBOutlet UISwitch *softKeyboardHeightSwitch;
+
@property (strong, nonatomic) IBOutlet UIStackView *controllerToMouseStack;
@property (strong, nonatomic) IBOutlet UISwitch *controllerToMouseSwitch;
@@ -255,7 +258,6 @@
@property (weak, nonatomic) IBOutlet UIStackView *trackTouchPointStack;
@property (weak, nonatomic) IBOutlet UISwitch *trackTouchPointSwitch;
-
@property (strong, nonatomic) IBOutlet UIStackView *testStack;
diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m
index dc253838..94772cde 100644
--- a/VoidLink/ViewControllers/SettingsViewController.m
+++ b/VoidLink/ViewControllers/SettingsViewController.m
@@ -33,9 +33,11 @@
NSInteger _bitrate;
NSInteger _lastSelectedResolutionIndex;
+ CGFloat softKeyboardHeight;
bool settingsViewJustLoaded;
bool settingsViewJustExpanded;
bool settingsViewAlreadyAppeared;
+ bool autoPopKeyboard;
uint16_t oswLayoutFingers;
CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer;
NSMutableDictionary *_settingStackDict;
@@ -568,6 +570,7 @@ BOOL isCustomResolution(int resolutionSelected) {
settingsViewJustExpanded = false;
settingsViewAlreadyAppeared = true;
+ autoPopKeyboard = true;
}
- (void)viewWillDisappear:(BOOL)animated{
@@ -959,6 +962,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[self addSetting:self.optimizeGamesStack ofId:@"optimizeGamesStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[self addSetting:self.multiControllerStack ofId:@"multiControllerStack" withInfoTag:NO withDynamicLabel:NO to:otherSection];
[self addSetting:self.softKeyboardToolbarStack ofId:@"softKeyboardToolbarStack" withInfoTag:NO withDynamicLabel:NO to:otherSection];
+ [self addSetting:self.softKeyboardHeightStack ofId:@"softKeyboardHeightStack" withInfoTag:YES withDynamicLabel:NO to:otherSection];
[self addSetting:self.rememberFoldStateStack ofId:@"rememberFoldStateStack" withInfoTag:NO withDynamicLabel:NO to:otherSection];
[otherSection addToParentStack:_parentStack];
@@ -1527,6 +1531,10 @@ BOOL isCustomResolution(int resolutionSelected) {
showOnlineDocAction = true;
onlineDocLink = [LocalizationHelper localizedStringForKey:@"PencilProPackURL"];
}
+ if([sender.superview.accessibilityIdentifier isEqualToString: @"softKeyboardHeightStack"]){
+ tipText = [LocalizationHelper localizedStringForKey:@"softKeyboardHeightStackTip"];
+ showOnlineDocAction = false;
+ }
UIAlertController *tipsAlertController = [UIAlertController alertControllerWithTitle: [LocalizationHelper localizedStringForKey:@"Tips"] message:tipText preferredStyle:UIAlertControllerStyleAlert];
@@ -2070,6 +2078,11 @@ BOOL isCustomResolution(int resolutionSelected) {
// showkeyboard toolbar setting
[self.softKeyboardToolbarSwitch setOn:self->tempSettings.showKeyboardToolbar];// Load old setting
+
+ self->softKeyboardHeight = self->tempSettings.softKeyboardHeight;
+ [self.softKeyboardHeightSwitch setOn:self->softKeyboardHeight!=0];// Load old setting
+ [self.softKeyboardHeightSwitch addTarget:self action:@selector(softKeyboardHeightSwitchFlipped:) forControlEvents:UIControlEventValueChanged];
+
// reverse mouse wheel direction setting
[self.reverseMouseWheelDirectionSelector setSelectedSegmentIndex:self->tempSettings.reverseMouseWheelDirection ? 1 : 0];// Load old setting
@@ -2982,6 +2995,55 @@ BOOL isCustomResolution(int resolutionSelected) {
else [self pinchGestureSwitchFlipped:_pinchGestureSwitch];
}
+- (void)softKeyboardHeightSwitchFlipped:(UISwitch* )sender{
+ if(sender.isOn && !settingsViewJustLoaded){
+ autoPopKeyboard = false;
+ [GenericUtils setVerticalScaleWithView:self.view show:true];
+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[LocalizationHelper localizedStringForKey:@""]
+ message:[LocalizationHelper localizedStringForKey:@"Enter the relative height of the soft keyboard according to the scale (make sure app is in landscape fullscreen mode):"]
+ preferredStyle:UIAlertControllerStyleAlert];
+
+ [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
+ textField.placeholder = [LocalizationHelper localizedStringForKey:@"e.g. 0.45"];
+ textField.keyboardType = UIKeyboardTypeASCIICapable;
+ textField.autocorrectionType = UITextAutocorrectionTypeNo;
+ textField.spellCheckingType = UITextSpellCheckingTypeNo;
+ textField.delegate = self;
+ textField.text = self->softKeyboardHeight == 0 ? nil : [NSString stringWithFormat:@"%.2f", self->softKeyboardHeight];
+ }];
+
+ UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:[LocalizationHelper localizedStringForKey:@"Cancel"]
+ style:UIAlertActionStyleCancel
+ handler:^(UIAlertAction *action) {
+ [GenericUtils setVerticalScaleWithView:self.view show:false];
+ [sender setOn:self->softKeyboardHeight!=0];
+ self->autoPopKeyboard = true;
+ }];
+
+ UIAlertAction *okAction = [UIAlertAction actionWithTitle:[LocalizationHelper localizedStringForKey:@"OK"]
+ style:UIAlertActionStyleDefault
+ handler:^(UIAlertAction *action) {
+ self->softKeyboardHeight = [GenericUtils toCGFloat:alertController.textFields[0].text];
+ [GenericUtils setVerticalScaleWithView:self.view show:false];
+ [sender setOn:self->softKeyboardHeight!=0];
+ self->autoPopKeyboard = true;
+ }];
+ [alertController addAction:cancelAction];
+ [alertController addAction:okAction];
+ [self presentViewController:alertController animated:YES completion:nil];
+ }
+}
+
+// UITextFieldDelegate
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
+ if (autoPopKeyboard) {
+ return YES;
+ } else {
+ autoPopKeyboard = YES;
+ return NO;
+ }
+}
+
- (void)pinchGestureSwitchFlipped:(UISwitch* )sender{
[self setHidden:!sender.isOn forStack:_pinchSensitivityStack];
[self setHidden:!sender.isOn forStack:_ctrlDownForPinchStack];
@@ -3690,6 +3752,7 @@ BOOL isCustomResolution(int resolutionSelected) {
NSInteger controllerGyroSwitchMode = self.controllerGyroSwitchButtonSetter.selectedSegmentIndex;
BOOL enableFrameTimebase = false;
BOOL asyncFrameDequeue = self.asyncFrameDequeueSwitch.isOn;
+ CGFloat softKeyboardHeight = self.softKeyboardHeightSwitch.isOn ? self->softKeyboardHeight : 0;
NSInteger backgroundSessionTimer = self.backgroundSessionTimerSlider.value == self.backgroundSessionTimerSlider.maximumValue ? (uint32_t) INT16_MAX : (uint32_t)self.backgroundSessionTimerSlider.value;
[dataMan saveSettings:currentSettings
@@ -3766,6 +3829,7 @@ BOOL isCustomResolution(int resolutionSelected) {
enableFrameTimebase:enableFrameTimebase
asyncFrameDequeue:asyncFrameDequeue
sdrPerformanceWorkaround:sdrPerformanceWorkaround
+ softKeyboardHeight:softKeyboardHeight
backgroundSessionTimer:backgroundSessionTimer];
}
diff --git a/VoidLink/mul.lproj/iPad.xcstrings b/VoidLink/mul.lproj/iPad.xcstrings
index 2c46ce61..0d3d34ad 100644
--- a/VoidLink/mul.lproj/iPad.xcstrings
+++ b/VoidLink/mul.lproj/iPad.xcstrings
@@ -1657,6 +1657,36 @@
}
}
},
+ "Bue-gF-hRI.text" : {
+ "comment" : "Class = \"UILabel\"; text = \"Designate Soft Keyboard Height\"; ObjectID = \"Bue-gF-hRI\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Designate Soft Keyboard Height"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "指定软键盘高度"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "指定軟鍵盤高度"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "needs_review",
+ "value" : "指定軟鍵盤高度"
+ }
+ }
+ }
+ },
"bVv-CW-kN8.segmentTitles[0]" : {
"comment" : "Class = \"UISegmentedControl\"; bVv-CW-kN8.segmentTitles[0] = \"Regular\"; ObjectID = \"bVv-CW-kN8\";",
"extractionState" : "extracted_with_value",
@@ -2297,7 +2327,8 @@
"value" : "關閉"
}
}
- }
+ },
+ "shouldTranslate" : false
},
"dpd-Bw-aHE.segmentTitles[1]" : {
"comment" : "Class = \"UISegmentedControl\"; dpd-Bw-aHE.segmentTitles[1] = \"Yes\"; ObjectID = \"dpd-Bw-aHE\";",
@@ -2327,7 +2358,8 @@
"value" : "啟用"
}
}
- }
+ },
+ "shouldTranslate" : false
},
"dqh-nl-heL.title" : {
"comment" : "Class = \"UINavigationItem\"; title = \"Title\"; ObjectID = \"dqh-nl-heL\";",
@@ -4768,7 +4800,8 @@
"value" : "螢幕小工具佈局"
}
}
- }
+ },
+ "shouldTranslate" : false
},
"q78-aY-mIe.text" : {
"comment" : "Class = \"UILabel\"; text = \"Disable Hovering\"; ObjectID = \"q78-aY-mIe\";",
diff --git a/VoidLink/mul.lproj/iPhone.xcstrings b/VoidLink/mul.lproj/iPhone.xcstrings
index cb636f21..8c90eed4 100644
--- a/VoidLink/mul.lproj/iPhone.xcstrings
+++ b/VoidLink/mul.lproj/iPhone.xcstrings
@@ -3091,6 +3091,36 @@
}
}
},
+ "Mhe-jU-8hh.text" : {
+ "comment" : "Class = \"UILabel\"; text = \"Designate Soft Keyboard Height\"; ObjectID = \"Mhe-jU-8hh\";",
+ "extractionState" : "extracted_with_value",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "new",
+ "value" : "Designate Soft Keyboard Height"
+ }
+ },
+ "zh-Hans" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "指定软键盘高度"
+ }
+ },
+ "zh-Hant" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "指定軟鍵盤高度"
+ }
+ },
+ "zh-HK" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "指定軟鍵盤高度"
+ }
+ }
+ }
+ },
"MMc-Yp-e6i.text" : {
"comment" : "Class = \"UILabel\"; text = \"Async Native Touch\"; ObjectID = \"MMc-Yp-e6i\";",
"extractionState" : "extracted_with_value",