【问题标题】:UITableViewCell frame different if loaded from nib vs. storyboard如果从笔尖与情节提要加载 UITableViewCell 框架不同
【发布时间】:2020-04-18 09:25:14
【问题描述】:

我有一个带有 UITableView 的 UIViewController,每个 UITableViewCell 里面都有一个 UICollectionView。视图控制器是从一个基本的简单 nib 文件(其中包含一个 UITableView 的 UIView)加载的,而自定义 UITableViewCell 是从一个单独的 nib 文件加载的。 UICollectionView 和 UITableViewCell 都必须动态调整大小。它可以工作,但是当最初加载 tableview 及其单元格时,在调用 cellForRowAtIndexPath 时它们似乎没有正确的帧大小,这导致 collectionView 的大小不准确,因此 UITableViewCell 的高度为不符合它的内容。在cellForRowAtIndexPath 内部,它似乎采用了在 nib 文件中显示的 tableview 的框架,而不是该设备上 tableView 的正确大小。如果我调用[tableView reloadData]或上下滚动,单元格的框架是正确的,因此collectionView的高度和tableViewCell的高度都是正确的。

有趣的是如果我更改设置以便从情节提要加载 UIViewController,然后将相同的单元格作为原型单元格嵌入情节提要的 UITableView ... 现在一切正常,并且UITableViewCell 现在在第一次通过时正确加载单元格的框架,因此我不需要调用[tableView reloadData] 来使其正确调整每个单元格的大小。

我不确定为什么它的行为有所不同。理想情况下,我会使用 nib 解决方案,因为我想在不同的地方重用相同的单元格,并且没有办法将 UITableViewCell 从一个故事板重用到另一个故事板。

对于从 nib 文件加载时与从情节提要加载时 UITableViewCell 为何在 cellForRowAtIndexPath 中未正确调整大小的任何猜测或想法?

【问题讨论】:

    标签: ios uitableview uicollectionview uistoryboard


    【解决方案1】:

    我认为在您的情况下,当您使用 nib 文件时,它们会在您的视图控制器的视图大小根据您的模拟器发生变化之前呈现。而且由于viewcontroller的view size不正确,view中的tableview size也是false。当您重新加载表格或滚动表格视图时,查看尺寸会获得您的模拟器设备尺寸,真实尺寸。然后单元格适合表格。您可以在调试时看到;视图的大小等于故事板中的设备大小。

    【讨论】:

    • 这在一定程度上是对的;视图控制器的大小正确,但 UITableViewCell 大小不正确。两者都是从单独的 nib 文件加载的。我要解决的问题是如何在加载时正确调整 UITableViewCell 的大小,而无需重新加载 tableView。
    • 嗯,我以前遇到过类似的问题,也许你的限制会影响这个。我可以看看你的 nib 文件吗?
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多