菜鸟教程小白 发表于 2022-12-13 03:53:24

ios - UITableViewCell 在运行 iOS 11 的 iPhone X 上无法正确调整大小


                                            <p><p>我有一个 <code>UITableViewCell</code> 里面只包含一个标签。标签被限制在单元格的所有边距(顶部、底部、尾随和前导)。它是一个多行标签(lines = 0)并且有一些静态文本,它们将在 iPhone X 的屏幕上以横向和纵向占据多行。</p>

<p>这是 <a href="/image/fdfp1.png" rel="noreferrer noopener nofollow">screenshot</a> IB 的约束。</p>

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

<p>代码中的行数设置为 30。(足够的单元格始终占据屏幕)</p>

<p>我已经在一个新项目中实现了上述所有内容。大部分是在 IB 上完成的,<code>UITableViewController</code> 子类只包含两个方法,<code>numberOfRowsInSection</code> 和 <code>cellForRowAt indexPath</code>。该项目是在 Xcode 9 上使用 Swift 4 创建的,并且设备在 iOS 11.2 上运行。</p>

<p>这是 <code>UITableViewController</code> 子类的代码</p>

<pre><code>class ViewController: UITableViewController {

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
      return 30
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
      let cell = tableView.dequeueReusableCell(withIdentifier: &#34;cell&#34;, for: indexPath)
      return cell
    }
}
</code></pre>

<p>VC 首次启动时,所有单元格的大小都已正确调整。在将设备旋转为横向时,单元格会按预期调整大小。现在,当我将设备转回纵向时,<strong>单元格占据的高度超出了应有的高度</strong>。</p>

<p><strong>这只发生在 iPhone X 上</strong>。这些单元格在所有其他 iPhone 上都按预期布局。</p>

<p>此外,我的任何旧项目(使用 Xcode 8 创建)都不会发生这种情况。</p>

<p> <a href="/image/ijHYK.png" rel="noreferrer noopener nofollow">When the VC launches</a> </p>

<p> <a href="/image/uIhs3.png" rel="noreferrer noopener nofollow">After rotating to landscape and back</a> </p>

<p> <img src="/image/ijHYK.png" alt="before"/> <img src="/image/uIhs3.png" alt="after"/> </p>

<p>我一直在尝试复制旧项目中的所有属性,但它的大小仍然不正确。</p>

<p>任何意见将不胜感激...
谢谢!</p>

<p><strong>编辑:</strong></p>

<p>正如 Brandon 所指出的,它仅在 <code>UITableViewController</code> 嵌入到 <code>UINavigationController</code> 时发生。嵌入在 <code>UINavigationController</code> 中的 <code>UIViewController</code> 中的 <code>UITableView</code> 显示正确的行为。 <code>UINavigationController</code> 之外的 <code>UITableViewController</code> 也按预期运行。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>嗯..我能够 100% 的重现这个..这非常奇怪,因为如果 <code>UITableViewController</code> 没有嵌入到 <code>UINavigationController</code> 中,那么一切正常..它嵌入的第二个,它表现出您帖子中显示的行为..</p>

<p>为了修复它,我做了:</p>

<pre><code>override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    self.tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows!, with: .automatic)
}
</code></pre>

<p>它可以工作,但始终不理想地重新加载。. 还没有找到另一个解决方案.. 到目前为止,它只发生在 <code>UINavigationController</code> 中嵌入的 <code>UITableViewController</code> >.. 嵌入在 <code>UINavigationController</code> 中的 <code>UIViewController</code> 内的 <code>UITableView</code> 不会发生这种情况。它非常特定于 Table Controller。</p>

<p>这对我来说似乎是一个错误。我检查了几乎所有 Storyboard 参数,但没有找到任何解决方案。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITableViewCell 在运行 iOS 11 的 iPhone X 上无法正确调整大小,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/48141255/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/48141255/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITableViewCell 在运行 iOS 11 的 iPhone X 上无法正确调整大小