From 75f1d4d392032d09267a782c1142f89192bf5d1f Mon Sep 17 00:00:00 2001 From: TrueZhuanjia Date: Mon, 22 Dec 2025 15:35:46 +0800 Subject: [PATCH] restore content offset after settings menu being loaded for the first time --- .../ViewControllers/SettingsViewController.m | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m index e0bdd9a3..fc1beccd 100644 --- a/VoidLink/ViewControllers/SettingsViewController.m +++ b/VoidLink/ViewControllers/SettingsViewController.m @@ -37,6 +37,7 @@ NSInteger _lastSelectedResolutionIndex; bool settingsViewJustLoaded; bool settingsViewJustExpanded; + bool settingsViewAlreadyAppeared; uint16_t oswLayoutFingers; CustomEdgeSlideGestureRecognizer *slideToCloseSettingsViewRecognizer; NSMutableDictionary *_settingStackDict; @@ -429,6 +430,10 @@ BOOL isCustomResolution(int resolutionSelected) { } } +- (bool)contentOffsetRestored{ + return fabs(_scrollView.contentOffset.y - tempSettings.settingsMenuOffset.floatValue)<2; +} + - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:NO]; @@ -511,7 +516,12 @@ BOOL isCustomResolution(int resolutionSelected) { [self reloadGameProfileConfigs]; self->tempSettings = [self->dataMan getSettings]; - } + + if(!settingsViewAlreadyAppeared){ + _scrollView.contentOffset = CGPointMake(_scrollView.contentOffset.x, tempSettings.settingsMenuOffset.floatValue); + _scrollView.hidden = true; + } +} - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:NO]; @@ -520,16 +530,17 @@ BOOL isCustomResolution(int resolutionSelected) { [self updateResolutionTable]; - // _scrollView.contentOffset = CGPointMake(_scrollView.contentOffset.x, tempSettings.settingsMenuOffset.floatValue); - /// cancel restoring contentOffset - [self.customResolutionSwitch addTarget:self action:@selector(customResolutionSwitched:) forControlEvents:UIControlEventValueChanged]; [self.customResolutionSwitch setOn: isCustomResolution(self->tempSettings.resolutionSelected.intValue)]; [self.resolutionSelector setEnabled:!self.customResolutionSwitch.isOn]; [self touchModeChanged:self.touchModeSelector1]; // a special fix for iOS 14 to set hidden for the "enableOswStack" + + if(!settingsViewAlreadyAppeared && ![self contentOffsetRestored]) _scrollView.contentOffset = CGPointMake(_scrollView.contentOffset.x, tempSettings.settingsMenuOffset.floatValue); + _scrollView.hidden = false; settingsViewJustExpanded = false; + settingsViewAlreadyAppeared = true; } - (void)viewWillDisappear:(BOOL)animated{ @@ -1689,6 +1700,7 @@ BOOL isCustomResolution(int resolutionSelected) { self->settingsViewJustLoaded = true; self->settingsViewJustExpanded = true; + self->settingsViewAlreadyAppeared = false; // Always run settings in dark mode because we want the light fonts if (@available(iOS 13.0, tvOS 13.0, *)) {