菜鸟教程小白 发表于 2022-12-12 10:07:11

ios - pop segue 后方向未更新


                                            <p><h1>我的设置</h1>

<p>我有一个 <code>UICollectionViewController</code>,它显示 <strong>纵向 2 列</strong> 和 <strong>横向 3 列</strong>,就像这样:</p>

<p> <a href="/image/0yPsam.jpg" rel="noreferrer noopener nofollow"><img src="/image/0yPsam.jpg" alt="Portrait Orientation"/></a> . . . . <a href="/image/PcfgRm.jpg" rel="noreferrer noopener nofollow"><img src="/image/PcfgRm.jpg" alt="Landscape Orientation"/></a> </p>

<p>我正在使用此代码在旋转时触发布局刷新:</p>

<pre><code>- (void)updateViewConstraints
{
    ;
    [ invalidateLayout];
}
</code></pre>

<p>一切正常,<strong>但是...</strong></p>

<h1>问题</h1>

<p><strong>1.</strong>我正在纵向查看collectionView:</p>

<p> <a href="/image/0yPsam.jpg" rel="noreferrer noopener nofollow"><img src="/image/0yPsam.jpg" alt="Portrait Orientation"/></a> </p>

<p>一切都好。</p>

<p><strong>2.</strong>我单击其中一个单元格以转到详细 View ,该 View 也支持两种方向。然后在详细 View 中,我<strong>将方向切换为横向</strong>。还是不错的。</p>

<p><strong>3.</strong> 还是在 Landscape 中,我现在点击 <code><back</code> 回到 collectionView,然后我看到的是这样的:</p>

<p> <a href="/image/Hpgt0m.jpg" rel="noreferrer noopener nofollow"><img src="/image/Hpgt0m.jpg" alt="The error"/></a>哎呀!</p>

<p>我完全不知道这是什么原因。在 SO 和 Google 上搜索没有出现任何结果。</p>

<h1>我的尝试</h1>

<p>我尝试在 collectionVC.m 文件中实现此方法:</p>

<pre><code>- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id&lt;UIViewControllerTransitionCoordinator&gt;)coordinator
{
   ;
   [ invalidateLayout];
}
</code></pre>

<p>虽然即使我在 detailView 上也会调用它,但它并不能解决问题。</p>

<h1>注意事项:</h1>

<ol>
<li>除了我在上面发布的两个之外,我没有实现任何与方向相关的应该/将/已完成的方法。</li>
<li>我注意到的一件事是,collectionView 正在切换到 2 列布局。看起来它的 View 边界变得困惑了。</li>
</ol>

<p> <a href="/image/QO7jPs.png" rel="noreferrer noopener nofollow"><img src="/image/QO7jPs.png" alt="Potato"/></a>对不起,很长的帖子。这是一个土 bean 。</p>

<p>那么你有什么想法吗?</p>

<p><strong>更新</strong>:我抓到了 <a href="/image/BaYTP.png" rel="noreferrer noopener nofollow">screenshot of the UI hierarchy</a> ,可能会有所帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您面临的问题是,当集合 viewController 不可见时,旋转确实发生了。所以 <code>updateViewConstraints</code> 和 <code>viewWillTransitionToSize:withTransitionCoordinator:</code> 都不会被调用。 </p>

<p>这个问题有两种可能的解决方案。 </p>

<p>你可以观察到方向的变化</p>

<pre><code> // in viewDidLoad
[ addObserver:self selector:@selector(orientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

- (void)orientationDidChange:(NSNotification *)notification
{
       //TODO: resetup the layout itemSize, etc if your it depend on the collection bounds.
       // and make sure to do that after the rotation did happend(i.ein viewWillAppear or orientationDidChange:)
      [ invalidateLayout];
}
</code></pre>

<p>您可以在 <code>viewWillAppear</code> 中使布局无效</p>

<pre><code>   -(void)viewWillAppear:(BOOL)animated
   {
       ;
      //TODO: resetup the layout itemSize, etc if your it depend on the collection bounds.
       // and make sure to do that after the rotation did happend(i.ein viewWillAppear or orientationDidChange:)
       [ invalidateLayout];
   }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - pop segue 后方向未更新,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34739534/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34739534/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - pop segue 后方向未更新