gpt4 book ai didi

iOS 9 扩展状态栏错误?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:14 26 4
gpt4 key购买 nike

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

这是一个非常短的示例项目,它重现了这个错误: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,第一个和第三个 View Controller 隐藏状态栏,第二个显示它。

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

最佳答案

看起来像 iOS bug .

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


使用已弃用的 API

将 Info.plist 中的 View controller-based status bar appearance 条目更改为 NO。将这样的代码添加到您的所有 View Controller (或添加到公共(public)父类(super class),希望您有一个 ;)):

- (void)viewWillAppear:(BOOL)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)forceLayoutTransitionViewsToDepth:(NSUInteger)depth;

@end

UIView+TheTweak.m

#import "UIView+TheTweak.h"

@implementation UIView (TheTweak)

- (void)forceLayoutTransitionViewsToDepth:(NSUInteger)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 forceLayoutTransitionViewsToDepth:(depth - 1)];
}
}
}
}
}

@end

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

#import "UIViewController+TheTweak.h"

... // whatever goes here

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

[self transitionViewForceLayoutTweak];
}

或者您可以将有问题的 Controller 的背景变成黑色:)

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

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