liquid glass: settings menu navigation bar

This commit is contained in:
True Zhuanjia committed 2026-03-11 22:26:50 +08:00
1 parent 7bed913a1e
commit 201bf5b447
6 files changed
+71 -34

No files matched your search

-5
View File
@@ -16,11 +16,6 @@
@interface DataManager : NSObject @interface DataManager : NSObject
typedef NS_ENUM(NSUInteger, UINavigationBarHeight) {
UINavigationBarHeightIPad = 50,
UINavigationBarHeightIPhone = 44
};
typedef NS_ENUM(NSInteger, ControllerGyroSwitchMode) { typedef NS_ENUM(NSInteger, ControllerGyroSwitchMode) {
ControllerGyroSwitchDisabled, ControllerGyroSwitchDisabled,
ControllerGyroSwitchPressToToggle, ControllerGyroSwitchPressToToggle,
+1 -1
View File
@@ -204,7 +204,7 @@ class ThemeManager: NSObject {
let traits = UITraitCollection(userInterfaceStyle: .dark) let traits = UITraitCollection(userInterfaceStyle: .dark)
return UIColor.label.resolvedColor(with: traits) return UIColor.label.resolvedColor(with: traits)
} else { } else {
return UIColor.black return UIColor.white
} }
} }
} }
+20
View File
@@ -61,4 +61,24 @@ import Foundation
@objc static let menuSeparatorWidth: CGFloat = 0.7 @objc static let menuSeparatorWidth: CGFloat = 0.7
@objc static let menuSectionSeparatorWidth: CGFloat = 0.7 @objc static let menuSectionSeparatorWidth: CGFloat = 0.7
@objc static var hostViewNavigationBarHeight: CGFloat {
switch UIDevice.current.userInterfaceIdiom {
case .phone:
return liquidGlassEnabled ? 54 : 44
case .pad:
return liquidGlassEnabled ? 54 : 50
default:
return liquidGlassEnabled ? 54 : 50
}
}
@objc static var settingsMenuNavigationBarHeight: CGFloat {
// return isIPhone() ? 44 : hostViewNavigationBarHeight
return liquidGlassEnabled ? hostViewNavigationBarHeight+5 : hostViewNavigationBarHeight
}
@objc static var dockedNavBarTopAnchorOffset: CGFloat {
return liquidGlassEnabled ? 10 : 0
}
} }
@@ -1389,22 +1389,26 @@ static NSMutableSet* hostList;
- (UIBarButtonItem *)createAddHostButton{ - (UIBarButtonItem *)createAddHostButton{
// 创建按钮 // 创建按钮
bool liquidGlassEnabled = GenericUtils.liquidGlassEnabled;
// bool liquidGlassEnabled = false;
CGFloat buttonHeight = 30; CGFloat buttonHeight = 30;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor = GenericUtils.liquidGlassEnabled ? UIColor.whiteColor : [ThemeManager appPrimaryColor]; // #0A85FF button.backgroundColor = liquidGlassEnabled ? [ThemeManager appPrimaryColor] : [ThemeManager appPrimaryColor]; // #0A85FF
button.layer.cornerRadius = buttonHeight/2; button.layer.cornerRadius = buttonHeight/2;
button.clipsToBounds = !GenericUtils.liquidGlassEnabled; button.clipsToBounds = !liquidGlassEnabled;
// 设置图标(SF Symbol) // 设置图标(SF Symbol)
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration
configurationWithPointSize:GenericUtils.liquidGlassEnabled ? 18.7 :17 configurationWithPointSize:liquidGlassEnabled ? 18.7 :17
weight:GenericUtils.liquidGlassEnabled ? UIImageSymbolWeightRegular :UIImageSymbolWeightMedium]; weight:liquidGlassEnabled ? UIImageSymbolWeightRegular :UIImageSymbolWeightMedium];
UIImage *image = [UIImage systemImageNamed:@"plus.circle" withConfiguration:config]; UIImage *image = [UIImage systemImageNamed:@"plus.circle" withConfiguration:config];
[button setImage:image forState:UIControlStateNormal]; [button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = GenericUtils.liquidGlassEnabled ? UIEdgeInsetsMake(0, 7.6, 0.75, 0) : UIEdgeInsetsZero;; button.imageEdgeInsets = liquidGlassEnabled ? UIEdgeInsetsMake(0, 7.6, 0.75, 0) : UIEdgeInsetsZero;;
NSString* buttonStringHead = GenericUtils.liquidGlassEnabled ? @" " : @""; NSString* buttonStringHead = liquidGlassEnabled ? @" " : @"";
[button setTitle: [buttonStringHead stringByAppendingString: [button setTitle: [buttonStringHead stringByAppendingString:
[LocalizationHelper localizedStringForKey:@" Add Host"]] [LocalizationHelper localizedStringForKey:@" Add Host"]]
forState:UIControlStateNormal]; // 注意空格用于间隔 forState:UIControlStateNormal]; // 注意空格用于间隔
@@ -1413,10 +1417,10 @@ static NSMutableSet* hostList;
} }
// [button setTitleColor:UIColor.whiteColor forState:UIControlStateNormal]; // [button setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:GenericUtils.liquidGlassEnabled ? 17 : 16 weight:UIFontWeightMedium]; button.titleLabel.font = [UIFont systemFontOfSize:liquidGlassEnabled ? 17 : 16 weight:UIFontWeightMedium];
// 文字颜色设置为 tintColor 控制 // 文字颜色设置为 tintColor 控制
if(GenericUtils.liquidGlassEnabled) button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0.9, 0); if(liquidGlassEnabled) button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0.9, 0);
button.tintColor = GenericUtils.liquidGlassEnabled ? [ThemeManager appPrimaryColor] : UIColor.whiteColor; button.tintColor = liquidGlassEnabled ? [ThemeManager appPrimaryColor] : UIColor.whiteColor;
[button setTitleColor:button.tintColor forState:UIControlStateNormal]; [button setTitleColor:button.tintColor forState:UIControlStateNormal];
// button.tintColor = UIColor.whiteColor; // button.tintColor = UIColor.whiteColor;
// [button setTitleColor:button.tintColor forState:UIControlStateNormal]; // [button setTitleColor:button.tintColor forState:UIControlStateNormal];
@@ -1484,10 +1488,6 @@ static NSMutableSet* hostList;
} }
} }
- (CGFloat)getStandardNavBarHeight{
return [self isIPhone] ? UINavigationBarHeightIPhone : UINavigationBarHeightIPad;
}
- (void)applyNavBarAppearance{ - (void)applyNavBarAppearance{
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
self.navigationController.navigationBar.standardAppearance.backgroundColor = [UIColor clearColor]; // old ios depend on this, do not remove self.navigationController.navigationBar.standardAppearance.backgroundColor = [UIColor clearColor]; // old ios depend on this, do not remove
@@ -1519,6 +1519,12 @@ static NSMutableSet* hostList;
self->_addHostButton = [self createAddHostButton]; self->_addHostButton = [self createAddHostButton];
self->_helpButton = [self createHelpButton]; self->_helpButton = [self createHelpButton];
if (GenericUtils.liquidGlassEnabled) {
if (@available(iOS 26.0, *)) {
// _addHostButton.hidesSharedBackground = true;
// _helpButton.hidesSharedBackground = true;
}
}
//[self setupHostViewTitle]; //[self setupHostViewTitle];
@@ -1535,6 +1541,10 @@ static NSMutableSet* hostList;
UIImage *image = [[UIImage systemImageNamed:@"sidebar.left" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImage *image = [[UIImage systemImageNamed:@"sidebar.left" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[_settingsButton setImage:image]; [_settingsButton setImage:image];
_settingsButton.imageInsets = GenericUtils.liquidGlassEnabled ? UIEdgeInsetsMake(0, 0, 0, 0.55) : UIEdgeInsetsMake(10, 10, 0, 0); _settingsButton.imageInsets = GenericUtils.liquidGlassEnabled ? UIEdgeInsetsMake(0, 0, 0, 0.55) : UIEdgeInsetsMake(10, 10, 0, 0);
if(GenericUtils.liquidGlassEnabled){
// if(@available(iOS 26.0, *)) _settingsButton.hidesSharedBackground = YES;
_settingsButton.tintColor = [ThemeManager appPrimaryColor];
}
} else { } else {
[_settingsButton setTitle:[LocalizationHelper localizedStringForKey:@"Settings"]]; [_settingsButton setTitle:[LocalizationHelper localizedStringForKey:@"Settings"]];
} }
@@ -165,7 +165,8 @@ static CGFloat scaledValue( CGFloat v1, CGFloat min2, CGFloat max2, CGFloat min1
// reserve height for navigation bar // reserve height for navigation bar
]]; ]];
CGFloat navBarHeight = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone ? UINavigationBarHeightIPhone : UINavigationBarHeightIPad; // CGFloat navBarHeight = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone ? UINavigationBarHeightIPhone : UINavigationBarHeightIPad;
CGFloat navBarHeight = GenericUtils.settingsMenuNavigationBarHeight;
[NSLayoutConstraint activateConstraints:@[ [NSLayoutConstraint activateConstraints:@[
[_rearNavView.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor constant:navBarHeight], [_rearNavView.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor constant:navBarHeight],
@@ -911,7 +912,7 @@ const int FrontViewPositionNone = 0xff;
} }
else{ else{
// _rearViewRevealWidth = _rearViewRevealWidth + 20; // _rearViewRevealWidth = _rearViewRevealWidth + 20;
[self setupNavigationBar]; // [self setupNavigationBar];
} }
} }
@@ -963,6 +964,7 @@ const int FrontViewPositionNone = 0xff;
navBarAppearanceStandard.backgroundImage = nil; navBarAppearanceStandard.backgroundImage = nil;
_dockedNavBar.standardAppearance = navBarAppearanceStandard; _dockedNavBar.standardAppearance = navBarAppearanceStandard;
_dockedNavBar.scrollEdgeAppearance = navBarAppearanceStandard; _dockedNavBar.scrollEdgeAppearance = navBarAppearanceStandard;
_dockedNavBar.shadowImage = nil;
} else { } else {
_dockedNavBar.barTintColor = [UIColor clearColor]; _dockedNavBar.barTintColor = [UIColor clearColor];
_dockedNavBar.barTintColor = [ThemeManager menuBackgroundColor]; _dockedNavBar.barTintColor = [ThemeManager menuBackgroundColor];
@@ -989,7 +991,7 @@ const int FrontViewPositionNone = 0xff;
// 设置导航栏约束 // 设置导航栏约束
[NSLayoutConstraint activateConstraints:@[ [NSLayoutConstraint activateConstraints:@[
[_dockedNavBar.topAnchor constraintEqualToAnchor:_contentView.rearNavView.topAnchor], [_dockedNavBar.topAnchor constraintEqualToAnchor:_contentView.rearNavView.topAnchor constant:GenericUtils.dockedNavBarTopAnchorOffset],
[_dockedNavBar.bottomAnchor constraintEqualToAnchor:_contentView.rearNavView.bottomAnchor], [_dockedNavBar.bottomAnchor constraintEqualToAnchor:_contentView.rearNavView.bottomAnchor],
[_dockedNavBar.leadingAnchor constraintEqualToAnchor:_contentView.rearNavView.leadingAnchor], [_dockedNavBar.leadingAnchor constraintEqualToAnchor:_contentView.rearNavView.leadingAnchor],
[_dockedNavBar.widthAnchor constraintEqualToConstant:_rearViewRevealWidth], [_dockedNavBar.widthAnchor constraintEqualToConstant:_rearViewRevealWidth],
@@ -1006,10 +1008,15 @@ const int FrontViewPositionNone = 0xff;
[backButton setAction:@selector(foldRearView)]; [backButton setAction:@selector(foldRearView)];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[backButton setTitle:nil]; [backButton setTitle:nil];
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:23 weight:UIImageSymbolWeightMedium ]; UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:GenericUtils.liquidGlassEnabled ? 18 : 23 weight:UIImageSymbolWeightMedium];
UIImage *image = [[UIImage systemImageNamed:@"sidebar.left" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImage *image = [[UIImage systemImageNamed:@"sidebar.left" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[backButton setImage:image]; [backButton setImage:image];
backButton.imageInsets = UIEdgeInsetsMake(20, 10, 0, 0); backButton.imageInsets = GenericUtils.liquidGlassEnabled ? UIEdgeInsetsMake(0, 0, 0, 0.55) : UIEdgeInsetsMake(20, 10, 0, 0);
if(GenericUtils.liquidGlassEnabled){
// if(@available(iOS 26.0, *)) backButton.hidesSharedBackground = YES;
backButton.tintColor = [ThemeManager appPrimaryColor];
}
} else { } else {
[backButton setTitle:[LocalizationHelper localizedStringForKey:@"Collapse"]]; [backButton setTitle:[LocalizationHelper localizedStringForKey:@"Collapse"]];
} }
@@ -1024,10 +1031,17 @@ const int FrontViewPositionNone = 0xff;
[_disconnectButton setAction:@selector(disconnectRemoteSession)]; [_disconnectButton setAction:@selector(disconnectRemoteSession)];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[_disconnectButton setTitle:nil]; [_disconnectButton setTitle:nil];
UIImage *image = [[UIImage imageNamed:@"disconnect.svg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImage *image;
if(GenericUtils.liquidGlassEnabled){
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:16 weight:UIImageSymbolWeightSemibold];
image = [[UIImage systemImageNamed:@"rectangle.portrait.and.arrow.right" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}
else image = [[UIImage imageNamed:@"disconnect.svg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[_disconnectButton setImage:image]; [_disconnectButton setImage:image];
//_disconnectButton.imageInsets = UIEdgeInsetsMake(5, 5, 5, 5); if(GenericUtils.liquidGlassEnabled) _disconnectButton.imageInsets = UIEdgeInsetsMake(5, 5, 5, 5);
_disconnectButton.tintColor = [ThemeManager appPrimaryColor]; _disconnectButton.tintColor = [ThemeManager appPrimaryColor];
} else { } else {
[_disconnectButton setTitle:[LocalizationHelper localizedStringForKey:@"Disconnect"]]; [_disconnectButton setTitle:[LocalizationHelper localizedStringForKey:@"Disconnect"]];
@@ -1047,10 +1061,12 @@ const int FrontViewPositionNone = 0xff;
//[moreButton setAction:@selector(moreButtonTapped:)]; //[moreButton setAction:@selector(moreButtonTapped:)];
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[_moreButton setTitle:nil]; [_moreButton setTitle:nil];
UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:23 weight:UIImageSymbolWeightMedium ]; UIImageSymbolConfiguration *config = [UIImageSymbolConfiguration configurationWithPointSize:GenericUtils.liquidGlassEnabled ? 18 : 23
weight:GenericUtils.liquidGlassEnabled ? UIImageSymbolWeightMedium : UIImageSymbolWeightMedium];
UIImage *image = [[UIImage systemImageNamed:@"ellipsis.circle" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImage *image = [[UIImage systemImageNamed:@"ellipsis.circle" withConfiguration:config] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[_moreButton setImage:image]; [_moreButton setImage:image];
_moreButton.imageInsets = UIEdgeInsetsMake(20, 0, 0, -10); _moreButton.imageInsets = GenericUtils.liquidGlassEnabled ? UIEdgeInsetsMake(0, 0, 0, 0.75) : UIEdgeInsetsMake(20, 0, 0, -10);
if(GenericUtils.liquidGlassEnabled) _moreButton.tintColor = [ThemeManager appPrimaryColor];
} else { } else {
[_moreButton setTitle:[LocalizationHelper localizedStringForKey:@"Options"]]; [_moreButton setTitle:[LocalizationHelper localizedStringForKey:@"Options"]];
} }
@@ -267,7 +267,7 @@ CGSize resolutionTable[RESOLUTION_TABLE_SIZE];
} }
// Add a bit of padding so the view doesn't end right at the button of the display // Add a bit of padding so the view doesn't end right at the button of the display
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, _parentStack.frame.size.height + [self getStandardNavBarHeight] + 20); self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, _parentStack.frame.size.height + GenericUtils.settingsMenuNavigationBarHeight + 20);
double delayInSeconds = 3; double delayInSeconds = 3;
// Convert the delay into a dispatch_time_t value // Convert the delay into a dispatch_time_t value
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
@@ -601,10 +601,6 @@ BOOL isCustomResolution(int resolutionSelected) {
return [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone; return [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone;
} }
- (CGFloat)getStandardNavBarHeight{
return [self isIPhone] ? UINavigationBarHeightIPhone : UINavigationBarHeightIPad;
}
- (void)initParentStack{ - (void)initParentStack{
self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic; self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
// 可选:确保 scrollView 开启垂直滚动 // 可选:确保 scrollView 开启垂直滚动
@@ -619,7 +615,7 @@ BOOL isCustomResolution(int resolutionSelected) {
if(!_parentStack.superview){ if(!_parentStack.superview){
[self.scrollView addSubview:_parentStack]; [self.scrollView addSubview:_parentStack];
[NSLayoutConstraint activateConstraints:@[ [NSLayoutConstraint activateConstraints:@[
[_parentStack.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: currentSettingsMenuMode == AllSettings ? [self getStandardNavBarHeight] : [self getStandardNavBarHeight]+10], [_parentStack.topAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.topAnchor constant: currentSettingsMenuMode == AllSettings ? GenericUtils.settingsMenuNavigationBarHeight : GenericUtils.settingsMenuNavigationBarHeight+10],
[_parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20], [_parentStack.bottomAnchor constraintEqualToAnchor:self.scrollView.contentLayoutGuide.bottomAnchor constant:-20],
]]; ]];
} }