处理tabbar
This commit is contained in:
@@ -14,84 +14,97 @@
|
||||
@implementation BaseNavigationController
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// 统一返回箭头样式与颜色
|
||||
UIImage *backImg = [UIImage imageNamed:@"back_black_icon"];
|
||||
if (backImg) {
|
||||
self.navigationBar.backIndicatorImage = backImg;
|
||||
self.navigationBar.backIndicatorTransitionMaskImage = backImg;
|
||||
}
|
||||
self.navigationBar.tintColor = [UIColor blackColor]; // 箭头/按钮的着色
|
||||
[super viewDidLoad];
|
||||
// 统一返回箭头样式与颜色
|
||||
UIImage *backImg = [UIImage imageNamed:@"back_black_icon"];
|
||||
if (backImg) {
|
||||
self.navigationBar.backIndicatorImage = backImg;
|
||||
self.navigationBar.backIndicatorTransitionMaskImage = backImg;
|
||||
}
|
||||
self.navigationBar.tintColor = [UIColor blackColor]; // 箭头/按钮的着色
|
||||
|
||||
if (@available(iOS 14.0, *)) {
|
||||
self.navigationBar.topItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
||||
}
|
||||
if (@available(iOS 14.0, *)) {
|
||||
self.navigationBar.topItem.backButtonDisplayMode =
|
||||
UINavigationItemBackButtonDisplayModeMinimal;
|
||||
}
|
||||
|
||||
// 统一开启“边缘右滑返回”(interactivePopGestureRecognizer 在自定义导航栏/隐藏系统导航栏场景下可能失效)
|
||||
if (self.interactivePopGestureRecognizer) {
|
||||
self.interactivePopGestureRecognizer.delegate = self;
|
||||
self.interactivePopGestureRecognizer.enabled = YES;
|
||||
}
|
||||
// 统一开启“边缘右滑返回”(interactivePopGestureRecognizer
|
||||
// 在自定义导航栏/隐藏系统导航栏场景下可能失效)
|
||||
if (self.interactivePopGestureRecognizer) {
|
||||
self.interactivePopGestureRecognizer.delegate = self;
|
||||
self.interactivePopGestureRecognizer.enabled = YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
|
||||
if (self.viewControllers.count > 0) {
|
||||
viewController.hidesBottomBarWhenPushed = true;
|
||||
UIViewController *prev = self.topViewController;
|
||||
if (@available(iOS 14.0, *)) {
|
||||
prev.navigationItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
||||
} else {
|
||||
prev.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
|
||||
}
|
||||
- (void)pushViewController:(UIViewController *)viewController
|
||||
animated:(BOOL)animated {
|
||||
if (self.viewControllers.count > 0) {
|
||||
viewController.hidesBottomBarWhenPushed = true;
|
||||
UIViewController *prev = self.topViewController;
|
||||
if (@available(iOS 14.0, *)) {
|
||||
prev.navigationItem.backButtonDisplayMode =
|
||||
UINavigationItemBackButtonDisplayModeMinimal;
|
||||
} else {
|
||||
prev.navigationItem.backBarButtonItem =
|
||||
[[UIBarButtonItem alloc] initWithTitle:@""
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:nil
|
||||
action:nil];
|
||||
}
|
||||
[super pushViewController:viewController animated:animated];
|
||||
}
|
||||
[super pushViewController:viewController animated:animated];
|
||||
}
|
||||
|
||||
#pragma mark - UIGestureRecognizerDelegate
|
||||
|
||||
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
|
||||
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
|
||||
return self.viewControllers.count > 1;
|
||||
}
|
||||
return YES;
|
||||
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
|
||||
return self.viewControllers.count > 1;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
/// Push 一个 VC,若栈中已存在相同 class 的 VC,则先移除旧的再 push 新的。
|
||||
- (void)kb_pushViewControllerRemovingSameClass:(UIViewController *)viewController
|
||||
animated:(BOOL)animated {
|
||||
if (!viewController) { return; }
|
||||
- (void)kb_pushViewControllerRemovingSameClass:
|
||||
(UIViewController *)viewController
|
||||
animated:(BOOL)animated {
|
||||
if (!viewController) {
|
||||
return;
|
||||
}
|
||||
|
||||
NSMutableArray<UIViewController *> *stack = self.viewControllers.mutableCopy;
|
||||
// 移除同 class 的旧 VC(通常只有一个,这里按需移除第一个)
|
||||
UIViewController *toRemove = nil;
|
||||
for (UIViewController *vc in stack) {
|
||||
if ([vc isKindOfClass:[viewController class]]) {
|
||||
toRemove = vc;
|
||||
break;
|
||||
}
|
||||
NSMutableArray<UIViewController *> *stack = self.viewControllers.mutableCopy;
|
||||
// 移除同 class 的旧 VC(通常只有一个,这里按需移除第一个)
|
||||
UIViewController *toRemove = nil;
|
||||
for (UIViewController *vc in stack) {
|
||||
if ([vc isKindOfClass:[viewController class]]) {
|
||||
toRemove = vc;
|
||||
break;
|
||||
}
|
||||
if (toRemove) {
|
||||
[stack removeObject:toRemove];
|
||||
}
|
||||
if (toRemove) {
|
||||
[stack removeObject:toRemove];
|
||||
}
|
||||
|
||||
// 追加新 VC
|
||||
[stack addObject:viewController];
|
||||
|
||||
// 对前一个 VC 做统一的返回按钮样式处理,与 pushViewController: 保持一致
|
||||
if (stack.count > 1) {
|
||||
viewController.hidesBottomBarWhenPushed = YES;
|
||||
UIViewController *prev = stack[stack.count - 2];
|
||||
if (@available(iOS 14.0, *)) {
|
||||
prev.navigationItem.backButtonDisplayMode =
|
||||
UINavigationItemBackButtonDisplayModeMinimal;
|
||||
} else {
|
||||
prev.navigationItem.backBarButtonItem =
|
||||
[[UIBarButtonItem alloc] initWithTitle:@""
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:nil
|
||||
action:nil];
|
||||
}
|
||||
}
|
||||
|
||||
// 追加新 VC
|
||||
[stack addObject:viewController];
|
||||
|
||||
// 对前一个 VC 做统一的返回按钮样式处理,与 pushViewController: 保持一致
|
||||
if (stack.count > 1) {
|
||||
viewController.hidesBottomBarWhenPushed = YES;
|
||||
UIViewController *prev = stack[stack.count - 2];
|
||||
if (@available(iOS 14.0, *)) {
|
||||
prev.navigationItem.backButtonDisplayMode = UINavigationItemBackButtonDisplayModeMinimal;
|
||||
} else {
|
||||
prev.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
|
||||
style:UIBarButtonItemStylePlain
|
||||
target:nil
|
||||
action:nil];
|
||||
}
|
||||
}
|
||||
|
||||
[self setViewControllers:stack animated:animated];
|
||||
[self setViewControllers:stack animated:animated];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user