iOS 9 扩展状态栏错误?
<p><p>我的应用出现问题,应用顶部有一个黑条,我的整个 View 从顶部向下推了 20 点。</p>
<p>这里是一个非常简短的重现错误的示例项目:<a href="https://github.com/sbiermanlytle/iOS-status-bar-bug/tree/master" rel="noreferrer noopener nofollow">https://github.com/sbiermanlytle/iOS-status-bar-bug/tree/master</a> </p>
<p>复制:</p>
<ol>
<li>激活扩展状态栏(在 Googlemap 上开始路线或打开热点)</li>
<li>启动演示应用</li>
<li>导航到第三个 View </li>
<li>回到第二个 View ,你会看到顶部的黑条</li>
</ol>
<p>如何去掉黑条?</p>
<p>以下是示例应用的完整说明:</p>
<p>一共有3个 ViewController ,1个启动2个,<code>UIViewControllerBasedStatusBarAppearance</code>设置为<code>YES</code>,第1个和第3个 ViewController 隐藏状态栏,第2个显示它。</p>
<p>当您启动第二个 View 和第三个 View 时,一切都显示正常,但是当您关闭第三个 View 时,第二个 View 顶部有一个不会消失的黑条。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>看起来像 iOS <a href="https://openradar.appspot.com/24438517" rel="noreferrer noopener nofollow">bug</a> .</p>
<p>我不知道解决这个问题的好方法,但这些肯定有效:</p>
<hr/>
<h1>使用已弃用的 API</h1>
<p>将 Info.plist 中的 <code>View 基于 Controller 的状态栏外观</code> 条目更改为 <code>NO</code>。将这样的代码添加到<em>所有</em>你的 ViewController (或公共(public)父类(super class),希望你有一个;)):</p>
<pre><code>- (void)viewWillAppear:(BOOL)animated {
;
[ setStatusBarHidden:];
}
</code></pre>
<hr/>
<h1>使用丑陋的调整</h1>
<p>通过在导致条件时手动更新失败系统 View 的框架。这可能会也可能不会破坏测试应用程序之外的内容。</p>
<p>在<code>UIViewController+TheTweak.h</code></p>
<pre><code>#import <UIKit/UIKit.h>
@interface UIViewController (TheTweak)
- (void)transitionViewForceLayoutTweak;
@end
</code></pre>
<p>在 <code>UIViewController+TheTweak.m</code> 中(<strong>注意 FIXME 注释</strong>)</p>
<pre><code>#import "UIViewController+TheTweak.h"
#import "UIView+TheTweak.h"
@implementation UIViewController (TheTweak)
- (void)transitionViewForceLayoutTweak {
UIViewController *presenting = ;
if (( != nil) && ( != nil)) {
if () {
NSUInteger howDeepDownTheStack = 0;
do {
++howDeepDownTheStack;
presenting = ;
} 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 = [ keyWindow];
;
}
}
}
@end
</code></pre>
<p>在<code>UIView+TheTweak.h</code></p>
<pre><code>#import <UIKit/UIKit.h>
@interface UIView (TheTweak)
- (void)forceLayoutTransitionViewsToDepth:(NSUInteger)depth;
@end
</code></pre>
<p>在<code>UIView+TheTweak.m</code></p>
<pre><code>#import "UIView+TheTweak.h"
@implementation UIView (TheTweak)
- (void)forceLayoutTransitionViewsToDepth:(NSUInteger)depth {
if (depth > 0) { //just in case
for (UIView *childView in ) {
if () isEqualToString:@"UITransitionView"]) {
childView.frame = self.bounds;
if (depth > 1) {
;
}
}
}
}
}
@end
</code></pre>
<p>现在,在每个 ViewController (或公共(public)父类(super class))中:</p>
<pre><code>#import "UIViewController+TheTweak.h"
... // whatever goes here
- (void)viewWillAppear:(BOOL)animated {
;
;
}
</code></pre>
<hr/>
<p>或者你可以把有问题的 Controller 的背景变成黑色:)</p></p>
<p style="font-size: 20px;">关于iOS 9 扩展状态栏错误?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/37260258/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/37260258/
</a>
</p>
页:
[1]