gpt4 book ai didi

ios - 仅在 iOS7 上将 hidesBottomBarWhenPushed 设置为 YES 时 UITabBarController subview 消失

转载 作者:行者123 更新时间:2023-11-29 10:51:55 24 4
gpt4 key购买 nike

我制作了 UITabBarController 的子类,它在选项卡顶部添加了自定义 UIView 以替换 UITabBarItem 上的默认标记。我在自定义 UITabBarController 的 viewDidLoad 上添加了这些自定义角标(Badge) View 。

[self.view addSubview:_tabBarItem1BadgeView];

我的自定义 tabBarBadgeView 上的 drawRect 看起来像这样:

- (void)drawRect:(CGRect)rect{

CGContextRef ctx = UIGraphicsGetCurrentContext();
// Badge
CGSize size = self.frame.size;
CGSize badgeSize = [self sizeThatFits:size];
badgeSize.height = fminf(badgeSize.height, size.height);
CGFloat x = roundf((size.width - badgeSize.width) / 2.0f);
CGRect badgeRect = CGRectMake(x, roundf((size.height - badgeSize.height) / 2.0f), badgeSize.width, badgeSize.height);
CGContextAddEllipseInRect(ctx, rect);
CGContextSetFillColor(ctx, CGColorGetComponents([_badgeColor CGColor]));
CGContextFillPath(ctx);

[_textLabel drawTextInRect:badgeRect];
}

效果很好。我可以准确地在我添加的位置看到一个 badgeView。如果我切换选项卡,没有任何影响。

所有 tabControllers 的 View Controller 都是 UINavigationControllers。我有一个用例,其中一个选项卡的 UINavigationController 最顶层的 UIViewController 不应该显示 tabBar,所以我自然地设置了

controller.hidesBottomBarWhenPushed = YES

在推送 navigationController 堆栈之前。这成功地抑制了 tabBar,但我的自定义 UIViews 继续存在。为了解决这个问题,我将我的自定义 UITabBarController 设为 UINavigationControllerDelegate。这允许我在导航推送和弹出时手动隐藏和显示这些自定义 UIView。

我使用:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

效果很好....仅适用于 iOS6。

在 iOS7 上,自定义 UITabBarController 在从 hidesBottomBarWhenPushed 设置为 YES 的 UIViewController 弹出后不会显示自定义 UIView。如果 hidesBottomBarWhenPushed 设置为 NO,UIViews 将继续出现。

事实上,我完全删除了 UINavigationControllerDelegate,奇怪的是,当我在 UINavigationController 上向下钻取堆栈时(使用 hidesBottomBarWhenPushed=YES),tabBar 被隐藏,但我添加的自定义 UIView 仍然存在(这是我所期望的) ).但是当我从那里弹出时(这是最奇怪的部分),我回到了选项卡的顶级 Controller (它应该显示 tabBar),并且 tabBar 是可见的(预期的),但是自定义 UIViews 消失了。单击返回,它们出现,按返回,它们消失。

而且这种行为只发生在 iOS7 上。在显示带有 hidesBottomBarWhenPushed = YES 的 UIViewController 然后返回带有 hidesBottomBarWhenPushed = NO 的 UIViewController 之后,UITabBar 是否发生了不同的事情?

最佳答案

每当 UITabBarController 将自己的 View 重新添加到其层次结构时,您的自定义角标(Badge) View 就会隐藏在 UITabBarController 自己的 View 后面。

要让您的自定义角标(Badge) View 始终位于顶部,您可以覆盖自定义角标(Badge) View 上的 drawRect 并调用 [self.superview bringSubviewToFront:self];

- (void)drawRect:(CGRect)rect {
[self.superview bringSubviewToFront:self];

// Other code...
}

关于ios - 仅在 iOS7 上将 hidesBottomBarWhenPushed 设置为 YES 时 UITabBarController subview 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com