菜鸟教程小白 发表于 2022-12-12 12:56:24

iphone - UICollectionView 框架与工具栏错误


                                            <p><p>我有一个 UICollectionViewController,它是导航 Controller 和标签栏 Controller 的一部分。在导航 Controller 的开头,我将 Interface Builder 设置为在 View 底部显示工具栏。对于导航 Controller 的第一个 ViewController ,我使用 <code>;</code> 来隐藏工具栏,然后在我的 UICollectionViewController 中使用 </p>

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

<p>为了显示工具栏。这部分工作得很好,我的问题来 self 在 UICollectionView 中的 UICollectionViewCell。我希望它是 UICollectionView 的全尺寸,并且我正在使用 AutoLayout,所以我正在使用:</p>

<pre><code>-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return self.collectionView.frame.size;
}
</code></pre>

<p>但是,第一次加载 View 时,它返回了错误的值。第一次加载 View 和 CollectionView 时,返回 collectionView 的大小,包括 Toolbar 的高度,这会导致警告:</p>

<blockquote>
<p>the item height must be less that the height of the UICollectionView
minus the section insets top and bottom values.</p>
</blockquote>

<p>并且单元格没有加载。但是,当我在警告后强制执行 <code>;</code> 时,会为 <code>self.collectionView.frame.size</code> 返回正确的值并加载单元格。</p>

<p>对此我感到非常沮丧,并且非常感谢任何人可以提供的任何帮助。</p>

<p><strong>编辑:</strong>
在阅读了 Mundi 的评论后,我最终将我的一些代码更改为:</p>

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

<p>问题就解决了。但是,现在我有一个新的但相关的问题。当我添加 <code>;</code> (selectedIndexPath 是从第一个 ViewController 推送)到 <code>viewWillAppear</code> 时,我收到相同的警告关于 UICollectionView 项目的大小。如果我有这样的代码:</p>

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

<p>我没有收到那个大小警告,但我的 collectionView 总是从索引 0 开始,而不是 <code>selectedIndexPath</code>。如果我将顺序更改为:</p>

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

<p>我收到了那个大小警告,直到我调用一个方法来调用 reloadData,单元格才会加载。但是,它确实从正确的 indexPath 开始。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这个问题实际上是关于处理 View 生命周期。在 <code>viewWillAppear</code> 中,所有的 subview 都已经布置好了,所以也许你隐藏工具栏太晚了。 </p>

<p>您在显示工具栏后调用 <code>reloadData</code> 的解决方案并没有那么糟糕,因为所有这些都发生在 View 出现之前。这是合乎逻辑的 - 几何形状已更改,您必须重新计算布局。</p>

<p>尝试使用 ViewController 的 <code>hidesBottomBarWhenPushed</code> 属性。也许这可以解决这个问题而无需编写任何代码。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - UICollectionView 框架与工具栏错误,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17894301/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17894301/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - UICollectionView 框架与工具栏错误