菜鸟教程小白 发表于 2022-12-13 16:26:19

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 &lt;UIKit/UIKit.h&gt;

@interface UIViewController (TheTweak)

- (void)transitionViewForceLayoutTweak;

@end
</code></pre>
<p>在 <code>UIViewController+TheTweak.m</code> 中(<strong>注意 FIXME 注释</strong>)</p>
<pre><code>#import &#34;UIViewController+TheTweak.h&#34;
#import &#34;UIView+TheTweak.h&#34;

@implementation UIViewController (TheTweak)

- (void)transitionViewForceLayoutTweak {
    UIViewController *presenting = ;
    if (( != nil) &amp;&amp; ( != 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 &#39;key&#39; one. depends on your app&#39;s specifics
            UIWindow *window = [ keyWindow];
            ;
      }
    }
}

@end
</code></pre>
<p>在<code>UIView+TheTweak.h</code></p>
<pre><code>#import &lt;UIKit/UIKit.h&gt;

@interface UIView (TheTweak)

- (void)forceLayoutTransitionViewsToDepth:(NSUInteger)depth;

@end
</code></pre>
<p>在<code>UIView+TheTweak.m</code></p>
<pre><code>#import &#34;UIView+TheTweak.h&#34;

@implementation UIView (TheTweak)

- (void)forceLayoutTransitionViewsToDepth:(NSUInteger)depth {
    if (depth &gt; 0) { //just in case
      for (UIView *childView in ) {
            if () isEqualToString:@&#34;UITransitionView&#34;]) {
                childView.frame = self.bounds;
                if (depth &gt; 1) {
                  ;
                }
            }
      }
    }
}

@end
</code></pre>
<p>现在,在每个 ViewController (或公共(public)父类(super class))中:</p>
<pre><code>#import &#34;UIViewController+TheTweak.h&#34;

... // 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]
查看完整版本: iOS 9 扩展状态栏错误?