菜鸟教程小白 发表于 2022-12-12 16:22:34

ios - 如何修复titleView在过渡期间被隐藏到导航栏?


                                            <p><p>在我的 ViewController 中,我将 <code>titleView</code> 设置为一个 <code>UIView</code>,其中包含一个 <code>UIImageView</code> 使用 setCornerRadius 将其制成一个圆圈层。 </p>

<p>圆圈的上半部分位于导航栏上方,下半部分位于 View 上方,如下所示:</p>

<p> <img src="/image/SyE7h.png" alt="A"/> </p>

<p>现在,当我插入这个 ViewController 时,当它动画化时,圆的下半部分被切断,直到动画完成。仅显示导航栏 <em>in</em> 的部分,如下所示:</p>

<p> <img src="/image/klqVy.png" alt="B"/> </p>

<p>推送动画一结束,就会显示完整的圆圈。有什么方法可以阻止导航栏在动画发生时屏蔽/切断 <code>titleView</code> ,以便在动画期间显示完整的圆圈?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不确定你是否应该这样做。</p>

<p>无论如何:将圆圈添加到您的 UIWindow(在您的 UINavigationController 顶部)。我想你想把圆圈放在屏幕的中心(水平)。您可以使用过渡协调器(iOS 7.0 +)在 ViewController (推或弹出)的过渡旁边为圆圈设置动画。请注意,这 <em>only</em> 适用于动画过渡(即当设置 <code>animated</code> 时)。因此,当 <code>animated</code> 没有设置时,我们需要手动设置新的帧。</p>

<pre><code>- (void)viewWillAppear:(BOOL)animated {
    ;

    /* Add the circle to the key window (instead of the navigation bar). */
    UIWindow *keyWindow = [ keyWindow];
    ;

    /* Screen width: the initial position of the circle = center + screen width. */
    CGFloat width = self.view.bounds.size.width;

    CGRect destination = _circle.frame;
    destination.origin.x = 110.f;

    /* The transition coordinator is only available for animated transitions. */
    if (animated) {
      CGRect frame = destination;
      frame.origin.x += width;
      _circle.frame = frame;

      void (^animation)(id context) = ^(id context) {
            _circle.frame = destination;
      };

      [self.transitionCoordinator animateAlongsideTransitionInView:_circle
                                                         animation:animation
                                                          completion:animation];
    }else {
      _circle.frame = destination;
    }
}
</code></pre>

<p>将 <code>110.f</code> 替换为您的位置 (<code>110.f = ((320.f - 100.f)/2.f)</code>)。</p>

<p>现在,您还需要使用过渡协调器来为 pop 设置动画。</p>

<pre><code>- (void)viewWillDisappear:(BOOL)animated {
    ;

    /* Screen width: the initial position of the circle = center + screen width. */
    CGFloat width = self.view.bounds.size.width;

    CGRect destination = _circle.frame;
    destination.origin.x = 110.f + width;

    /* The transition coordinator is only available for animated transitions. */
    if (animated) {
      CGRect frame = destination;
      frame.origin.x = 110.f;
      _circle.frame = frame;

      void (^animation)(id context) = ^(id context) {
            _circle.frame = destination;
      };

      [self.transitionCoordinator animateAlongsideTransitionInView:_circle
                                                         animation:animation
                                                          completion:animation];
    }else {
      _circle.frame = destination;
    }
}
</code></pre>

<p>最后,一旦你的 ViewController 消失,从你的关键窗口中删除圆圈(注意这并不一定意味着你的 ViewController 被弹出,你总是可以在 <code>viewWillAppear:</code>).</p>

<pre><code>- (void)viewDidDisappear:(BOOL)animated {
    ;

    /* Remove the circle from your key window. */
    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何修复titleView在过渡期间被隐藏到导航栏?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19939028/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19939028/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何修复titleView在过渡期间被隐藏到导航栏?