添加渐变色

This commit is contained in:
2026-01-16 21:37:18 +08:00
parent 552387293c
commit 063ceae10f
7 changed files with 342 additions and 152 deletions

View File

@@ -7,132 +7,215 @@
#import "BaseTabBarController.h"
#import "HomeMainVC.h"
#import "MyVC.h"
#import "KBShopVC.h"
#import "KBAiMainVC.h"
#import "KBShopVC.h"
#import "MyVC.h"
//#import "KBCommunityVC.h"
// #import "KBCommunityVC.h"
#import "BaseNavigationController.h"
#import "KBAuthManager.h"
@interface BaseTabBarController ()
/// TabBar appearance
@property(nonatomic, strong)
UITabBarAppearance *originalAppearance API_AVAILABLE(ios(13.0));
@property(nonatomic, strong)
UITabBarAppearance *transparentAppearance API_AVAILABLE(ios(13.0));
@end
@implementation BaseTabBarController
- (void)viewDidLoad {
[super viewDidLoad];
[super viewDidLoad];
self.delegate = self;
self.delegate = self;
[self setupTabbarAppearance];
[self setupTabbarAppearance];
// 4 Tab / / /
// Assets.xcassets/Tabbar tab_home/tab_home_selected
// 4 Tab / / /
// Assets.xcassets/Tabbar tab_home/tab_home_selected
//
HomeMainVC *home = [[HomeMainVC alloc] init];
BaseNavigationController *navHome = [[BaseNavigationController alloc] initWithRootViewController:home];
navHome.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Home")
//
HomeMainVC *home = [[HomeMainVC alloc] init];
BaseNavigationController *navHome =
[[BaseNavigationController alloc] initWithRootViewController:home];
navHome.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Home")
image:@"tab_home"
selectedImg:@"tab_home_selected"];
//
KBShopVC *shop = [[KBShopVC alloc] init];
BaseNavigationController *navShop = [[BaseNavigationController alloc] initWithRootViewController:shop];
navShop.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Shop")
//
KBShopVC *shop = [[KBShopVC alloc] init];
BaseNavigationController *navShop =
[[BaseNavigationController alloc] initWithRootViewController:shop];
navShop.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Shop")
image:@"tab_shop"
selectedImg:@"tab_shop_selected"];
// AI
KBAiMainVC *aiMainVC = [[KBAiMainVC alloc] init];
// community.title = KBLocalized(@"Circle");
BaseNavigationController *navCommunity = [[BaseNavigationController alloc] initWithRootViewController:aiMainVC];
navCommunity.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Circle")
// AI
KBAiMainVC *aiMainVC = [[KBAiMainVC alloc] init];
// community.title = KBLocalized(@"Circle");
BaseNavigationController *navCommunity =
[[BaseNavigationController alloc] initWithRootViewController:aiMainVC];
navCommunity.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Circle")
image:@"tab_shequ"
selectedImg:@"tab_shequ_selected"];
//
MyVC *my = [[MyVC alloc] init];
BaseNavigationController *navMy = [[BaseNavigationController alloc] initWithRootViewController:my];
navMy.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Mine")
image:@"tab_my"
selectedImg:@"tab_my_selected"];
//
MyVC *my = [[MyVC alloc] init];
BaseNavigationController *navMy =
[[BaseNavigationController alloc] initWithRootViewController:my];
navMy.tabBarItem = [self tabItemWithTitle:KBLocalized(@"Mine")
image:@"tab_my"
selectedImg:@"tab_my_selected"];
self.viewControllers = @[aiMainVC,navHome, navShop, navMy];
// Token
// [[KBAuthManager shared] saveAccessToken:@"TEST" refreshToken:nil expiryDate:[NSDate dateWithTimeIntervalSinceNow:3600] userIdentifier:nil];
// [[KBAuthManager shared] signOut];
self.viewControllers = @[ navHome, navShop, aiMainVC, navMy ];
// Token
// [[KBAuthManager shared] saveAccessToken:@"TEST" refreshToken:nil
// expiryDate:[NSDate dateWithTimeIntervalSinceNow:3600]
// userIdentifier:nil];
// [[KBAuthManager shared] signOut];
}
- (void)setupTabbarAppearance{
// TabBar view TabBar
self.tabBar.translucent = NO;
if (@available(iOS 15.0, *)) {
UITabBarAppearance *a = [UITabBarAppearance new];
[a configureWithOpaqueBackground];
a.backgroundColor = [UIColor whiteColor];
// iOS 15+ appearance
NSDictionary *selAttr = @{ NSForegroundColorAttributeName : [UIColor blackColor] };
a.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
a.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
a.compactInlineLayoutAppearance.selected.titleTextAttributes = selAttr;
self.tabBar.standardAppearance = a;
self.tabBar.scrollEdgeAppearance = a;
} else if (@available(iOS 13.0, *)) {
UITabBarAppearance *a = [UITabBarAppearance new];
[a configureWithOpaqueBackground];
a.backgroundColor = [UIColor whiteColor];
NSDictionary *selAttr = @{ NSForegroundColorAttributeName : [UIColor blackColor] };
a.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
a.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
a.compactInlineLayoutAppearance.selected.titleTextAttributes = selAttr;
self.tabBar.standardAppearance = a;
self.tabBar.tintColor = [UIColor blackColor];
} else {
// tintColor/appearance 退
self.tabBar.tintColor = [UIColor blackColor];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor]}
forState:UIControlStateSelected];
}
- (void)setupTabbarAppearance {
// TabBar view TabBar
self.tabBar.translucent = NO;
if (@available(iOS 15.0, *)) {
UITabBarAppearance *a = [UITabBarAppearance new];
[a configureWithOpaqueBackground];
a.backgroundColor = [UIColor whiteColor];
// iOS 15+ appearance
NSDictionary *selAttr =
@{NSForegroundColorAttributeName : [UIColor blackColor]};
a.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
a.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
a.compactInlineLayoutAppearance.selected.titleTextAttributes = selAttr;
self.tabBar.standardAppearance = a;
self.tabBar.scrollEdgeAppearance = a;
// appearance
self.originalAppearance = a;
// appearance
UITabBarAppearance *transparentA = [UITabBarAppearance new];
[transparentA configureWithTransparentBackground];
transparentA.backgroundColor = [UIColor clearColor];
transparentA.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
transparentA.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
transparentA.compactInlineLayoutAppearance.selected.titleTextAttributes =
selAttr;
self.transparentAppearance = transparentA;
} else if (@available(iOS 13.0, *)) {
UITabBarAppearance *a = [UITabBarAppearance new];
[a configureWithOpaqueBackground];
a.backgroundColor = [UIColor whiteColor];
NSDictionary *selAttr =
@{NSForegroundColorAttributeName : [UIColor blackColor]};
a.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
a.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
a.compactInlineLayoutAppearance.selected.titleTextAttributes = selAttr;
self.tabBar.standardAppearance = a;
self.tabBar.tintColor = [UIColor blackColor];
// appearance
self.originalAppearance = a;
// appearance
UITabBarAppearance *transparentA = [UITabBarAppearance new];
[transparentA configureWithTransparentBackground];
transparentA.backgroundColor = [UIColor clearColor];
transparentA.stackedLayoutAppearance.selected.titleTextAttributes = selAttr;
transparentA.inlineLayoutAppearance.selected.titleTextAttributes = selAttr;
transparentA.compactInlineLayoutAppearance.selected.titleTextAttributes =
selAttr;
self.transparentAppearance = transparentA;
} else {
// tintColor/appearance 退
self.tabBar.tintColor = [UIColor blackColor];
[[UITabBarItem appearance] setTitleTextAttributes:@{
NSForegroundColorAttributeName : [UIColor blackColor]
}
forState:UIControlStateSelected];
}
}
// TabBarItem Tint
- (UITabBarItem *)tabItemWithTitle:(NSString *)title image:(NSString *)imageName selectedImg:(NSString *)selectedName {
UIImage *img = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *sel = [[UIImage imageNamed:selectedName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:title image:img selectedImage:sel];
return item;
- (UITabBarItem *)tabItemWithTitle:(NSString *)title
image:(NSString *)imageName
selectedImg:(NSString *)selectedName {
UIImage *img = [[UIImage imageNamed:imageName]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *sel = [[UIImage imageNamed:selectedName]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:title
image:img
selectedImage:sel];
return item;
}
#pragma mark - UITabBarControllerDelegate
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
// tab
if (tabBarController.selectedViewController == viewController) {
return YES;
}
NSUInteger index = [tabBarController.viewControllers indexOfObject:viewController];
if (index == NSNotFound) {
return YES;
}
// tab 4 3
if ((index == 1 || index == 2) && ![KBUserSessionManager shared].isLoggedIn) {
[[KBUserSessionManager shared] goLoginVC];
return NO;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController
shouldSelectViewController:(UIViewController *)viewController {
// tab
if (tabBarController.selectedViewController == viewController) {
return YES;
}
NSUInteger index =
[tabBarController.viewControllers indexOfObject:viewController];
if (index == NSNotFound) {
return YES;
}
// tab 4 3
if ((index == 1 || index == 2) && ![KBUserSessionManager shared].isLoggedIn) {
[[KBUserSessionManager shared] goLoginVC];
return NO;
}
return YES;
}
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController {
NSUInteger index =
[tabBarController.viewControllers indexOfObject:viewController];
// tab2 KBAiMainVC
if (index == 2) {
if (@available(iOS 13.0, *)) {
self.tabBar.standardAppearance = self.transparentAppearance;
if (@available(iOS 15.0, *)) {
self.tabBar.scrollEdgeAppearance = self.transparentAppearance;
}
} else {
// iOS 13
self.tabBar.barTintColor = [UIColor clearColor];
self.tabBar.backgroundColor = [UIColor clearColor];
}
} else {
// tab
if (@available(iOS 13.0, *)) {
self.tabBar.standardAppearance = self.originalAppearance;
if (@available(iOS 15.0, *)) {
self.tabBar.scrollEdgeAppearance = self.originalAppearance;
}
} else {
// iOS 13
self.tabBar.barTintColor = [UIColor whiteColor];
self.tabBar.backgroundColor = [UIColor whiteColor];
}
}
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
// In a storyboard-based application, you will often want to do a little
preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.