cdts/xdts-ios 3/TreeHole/CYHResetCode/THBaseViewController/THTabBar/THTabBarViewController.m
2023-07-27 09:20:00 +08:00

174 lines
7.8 KiB
Objective-C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// THTabBarViewController.m
// TreeHole
//
// Created by iOS on 2023/1/31.
//
//
#import "THTabBarViewController.h"
#import "THViewController.h"
#import "THNavigationController.h"
@interface THTabBarViewController ()
@end
@implementation THTabBarViewController
/*
- (instancetype)init {
if (!(self = [super init])) {
return nil;
}
/**
* 以下两行代码目的在于手动设置让TabBarItem只显示图标不显示文字并让图标垂直居中。
* 等效于在 `-tabBarItemsAttributesForController` 方法中不传 `CYLTabBarItemTitle` 字段。
* 更推荐后一种做法。
UIEdgeInsets imageInsets = UIEdgeInsetsZero;//UIEdgeInsetsMake(4.5, 0, -4.5, 0);
UIOffset titlePositionAdjustment = UIOffsetMake(0, -3.5);
CYLTabBarController *tabBarController = [CYLTabBarController tabBarControllerWithViewControllers:self.viewControllers tabBarItemsAttributes:self.tabBarItemsAttributesForController imageInsets:imageInsets titlePositionAdjustment:titlePositionAdjustment context:nil];
// tabBarController.tabBarHeight = 49;
[self customizeTabBarAppearanceWithTitlePositionAdjustment:titlePositionAdjustment];
// [self customizeTabBarAppearance:tabBarController];
// self.navigationController.navigationBar.hidden = YES;
return tabBarController;
}
- (NSArray *)viewControllers {
THViewController *homeVC = [[THViewController alloc] init];
homeVC.view.backgroundColor = [UIColor qmui_randomColor];
UIViewController *homeNav = [[THNavigationController alloc] initWithRootViewController:homeVC];
// [homeVC cyl_setHideNavigationBarSeparator:YES];
THViewController *nearVC = [[THViewController alloc] init];
nearVC.view.backgroundColor = [UIColor qmui_randomColor];
UIViewController *nearNav = [[THNavigationController alloc] initWithRootViewController:nearVC];
// [nearVC cyl_setHideNavigationBarSeparator:YES];
NSArray *viewControllers = @[
homeNav,
nearNav,
];
return viewControllers;
}
- (NSArray *)tabBarItemsAttributesForController {
NSDictionary *firstTabBarItemsAttributes = @{
CYLTabBarItemTitle : @"首页",
CYLTabBarItemImage : @"TH_TabBarBaseLocalNormal",
CYLTabBarItemSelectedImage : @"TH_TabBarBaseLocalSelected",
};
NSDictionary *secondTabBarItemsAttributes = @{
CYLTabBarItemTitle : @"鱼塘",
CYLTabBarItemImage :@"TH_TabBarMsgNormal",
CYLTabBarItemSelectedImage : @"TH_TabBarMsgSelected",
};
// NSDictionary *thirdTabBarItemsAttributes = @{
// CYLTabBarItemTitle : @"我的",
// CYLTabBarItemImage :@"fishpond_normal",
// CYLTabBarItemSelectedImage : @"fishpond_highlight",
// };
NSArray *tabBarItemsAttributes = @[
firstTabBarItemsAttributes,
secondTabBarItemsAttributes,
// thirdTabBarItemsAttributes
];
return tabBarItemsAttributes;
}
/**
* 更多TabBar自定义设置比如tabBarItem 的选中和不选中文字和背景图片属性、tabbar 背景图片属性等等
- (void)customizeTabBarAppearanceWithTitlePositionAdjustment:(UIOffset)titlePositionAdjustment {
// Customize UITabBar height
// 自定义 TabBar 高度
// tabBarController.tabBarHeight = CYL_IS_IPHONE_X ? 65 : 40;
[self rootWindow].backgroundColor = [UIColor cyl_systemBackgroundColor];
// set the text color for unselected state
// 普通状态下的文字属性
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary];
normalAttrs[NSForegroundColorAttributeName] = [UIColor cyl_systemGrayColor];
//normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10];
// set the text color for selected state
// 选中状态下的文字属性
NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary];
selectedAttrs[NSForegroundColorAttributeName] = [UIColor cyl_labelColor];
//selectedAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:10];
// Set the dark color to selected tab (the dimmed background)
// TabBarItem选中后的背景颜色
// [self customizeTabBarSelectionIndicatorImage];
// update TabBar when TabBarItem width did update
// If your app need support UIDeviceOrientationLandscapeLeft or UIDeviceOrientationLandscapeRight
// remove the comment '//'
// 如果你的App需要支持横竖屏请使用该方法移除注释 '//'
// [self updateTabBarCustomizationWhenTabBarItemWidthDidUpdate];
// set background color
// 设置 TabBar 背景
// 半透明
// [UITabBar appearance].translucent = YES;
// [UITabBar appearance].barTintColor = [UIColor cyl_systemBackgroundColor];
// [[UITabBar appearance] setBackgroundColor:[UIColor cyl_systemBackgroundColor]];
// [[UITabBar appearance] setBackgroundImage:[[self class] imageWithColor:[UIColor whiteColor] size:CGSizeMake([UIScreen mainScreen].bounds.size.width, tabBarController.tabBarHeight ?: (CYL_IS_IPHONE_X ? 65 : 40))]];
// [[UITabBar appearance] setUnselectedItemTintColor:[UIColor systemGrayColor]];
//Three way to deal with shadow 三种阴影处理方式:
// NO.3, without shadow : use -[[CYLTabBarController hideTabBarShadowImageView] in CYLMainRootViewController.m
// NO.2using layer to add shadow.
// CYLTabBarController *tabBarController = [self cyl_tabBarController];
// tabBarController.tabBar.layer.shadowColor = [UIColor blackColor].CGColor;
// tabBarController.tabBar.layer.shadowRadius = 15.0;
// tabBarController.tabBar.layer.shadowOpacity = 1;
// tabBarController.tabBar.layer.shadowOffset = CGSizeMake(0, 3);
// tabBarController.tabBar.layer.masksToBounds = NO;
// tabBarController.tabBar.clipsToBounds = NO;
// NO.1using Image note:recommended.推荐方式
// set the bar shadow image
// without shadow : use -[[CYLTabBarController hideTabBarShadowImageView] in CYLMainRootViewController.m
if (@available(iOS 13.0, *)) {
UITabBarItemAppearance *inlineLayoutAppearance = [[UITabBarItemAppearance alloc] init];
// fix https://github.com/ChenYilong/CYLTabBarController/issues/456
inlineLayoutAppearance.normal.titlePositionAdjustment = titlePositionAdjustment;
// set the text Attributes
// 设置文字属性
[inlineLayoutAppearance.normal setTitleTextAttributes:normalAttrs];
[inlineLayoutAppearance.selected setTitleTextAttributes:selectedAttrs];
UITabBarAppearance *standardAppearance = [[UITabBarAppearance alloc] init];
standardAppearance.stackedLayoutAppearance = inlineLayoutAppearance;
standardAppearance.backgroundColor = [UIColor cyl_systemBackgroundColor];
//shadowColor和shadowImage均可以自定义颜色, shadowColor默认高度为1, shadowImage可以自定义高度.
standardAppearance.shadowColor = [UIColor cyl_systemGreenColor];
// standardAppearance.shadowImage = [[self class] imageWithColor:[UIColor cyl_systemGreenColor] size:CGSizeMake([UIScreen mainScreen].bounds.size.width, 1)];
self.tabBar.standardAppearance = standardAppearance;
} else {
// Override point for customization after application launch.
// set the text Attributes
// 设置文字属性
UITabBarItem *tabBar = [UITabBarItem appearance];
[tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
[tabBar setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];
// This shadow image attribute is ignored if the tab bar does not also have a custom background image.So at least set somthing.
[[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]];
// [[UITabBar appearance] setShadowImage:[[UIImage alloc] qmui_imageWithTintColor:UIColor.redColor] size:CGSizeMake([UIScreen mainScreen].bounds.size.width, 1)]];
}
}
*/
@end