• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS 9 扩展状态栏错误?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 16:26:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的应用出现问题,应用顶部有一个黑条,我的整个 View 从顶部向下推了 20 点。

这里是一个非常简短的重现错误的示例项目:https://github.com/sbiermanlytle/iOS-status-bar-bug/tree/master

复制:

  1. 激活扩展状态栏(在 Google map 上开始路线或打开热点)
  2. 启动演示应用
  3. 导航到第三个 View
  4. 回到第二个 View ,你会看到顶部的黑条

如何去掉黑条?

以下是示例应用的完整说明:

一共有3个 View Controller ,1个启动2个,UIViewControllerBasedStatusBarAppearance设置为YES,第1个和第3个 View Controller 隐藏状态栏,第2个显示它。

当您启动第二个 View 和第三个 View 时,一切都显示正常,但是当您关闭第三个 View 时,第二个 View 顶部有一个不会消失的黑条。



Best Answer-推荐答案


看起来像 iOS bug .

我不知道解决这个问题的好方法,但这些肯定有效:


使用已弃用的 API

将 Info.plist 中的 View 基于 Controller 的状态栏外观 条目更改为 NO。将这样的代码添加到所有你的 View Controller (或公共(public)父类(super class),希望你有一个;)):

- (void)viewWillAppearBOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:[self prefersStatusBarHidden]];
}

使用丑陋的调整

通过在导致条件时手动更新失败系统 View 的框架。这可能会也可能不会破坏测试应用程序之外的内容。

UIViewController+TheTweak.h

#import <UIKit/UIKit.h>

@interface UIViewController (TheTweak)

- (void)transitionViewForceLayoutTweak;

@end

UIViewController+TheTweak.m 中(注意 FIXME 注释)

#import "UIViewController+TheTweak.h"
#import "UIView+TheTweak.h"

@implementation UIViewController (TheTweak)

- (void)transitionViewForceLayoutTweak {
    UIViewController *presenting = [self presentingViewController];
    if (([self presentedViewController] != nil) && ([self presentingViewController] != nil)) {
        if ([self prefersStatusBarHidden]) {
            
            NSUInteger howDeepDownTheStack = 0;
            do {
                ++howDeepDownTheStack;
                presenting = [presenting presentingViewController];
            } while (presenting != nil);
            
            //FIXME: replace with a reliable way to get window throughout whole app, without assuming it is the 'key' one. depends on your app's specifics
            UIWindow *window = [[UIApplication sharedApplication] keyWindow];
            [window forceLayoutTransitionViewsToDepth:howDeepDownTheStack];
        }
    }
}

@end

UIView+TheTweak.h

#import <UIKit/UIKit.h>

@interface UIView (TheTweak)

- (void)forceLayoutTransitionViewsToDepthNSUInteger)depth;

@end

UIView+TheTweak.m

#import "UIView+TheTweak.h"

@implementation UIView (TheTweak)

- (void)forceLayoutTransitionViewsToDepthNSUInteger)depth {
    if (depth > 0) { //just in case
        for (UIView *childView in [self subviews]) {
            if ([NSStringFromClass([childView class]) isEqualToString"UITransitionView"]) {
                childView.frame = self.bounds;
                if (depth > 1) {
                    [childView forceLayoutTransitionViewsToDepthdepth - 1)];
                }
            }
        }
    }
}

@end

现在,在每个 View Controller (或公共(public)父类(super class))中:

#import "UIViewController+TheTweak.h"

... // whatever goes here

- (void)viewWillAppearBOOL)animated {
    [super viewWillAppear:animated];
    
    [self transitionViewForceLayoutTweak];
}

或者你可以把有问题的 Controller 的背景变成黑色

关于iOS 9 扩展状态栏错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260258/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap