【问题标题】:BUG - TableView with strange size and not showing scroll indicatorsBUG - TableView 大小奇怪且不显示滚动指示器
【发布时间】:2015-12-31 05:00:17
【问题描述】:

我不记得我第一次看到这个错误是什么时候了。是否从 iOS 9 框架开始。

问题是当我在 Storyboard 中有一个 UITableView 作为我的 UIViewController 的第一个孩子时,tableView 显然具有更大的内容大小并且不显示滚动指示器。当我把一个透明的 UIView 作为第一个孩子时,问题就消失了。

UITableViewControllers 也会出现同样的问题。并且没有什么技巧,因为 de TableView 是 ViewController 的主视图。

有人也遇到过这个错误或知道如何修复它吗?

我正在尝试解决这个问题,以防止将来仅仅因为故事板处于“MacGyver 模式”而出现问题。

【问题讨论】:

  • UITableView 是在 UIViewController 中的 UIView 内还是根视图?另外,你在使用 AutoLayout 吗?
  • 检查 tableview 的框架。可能它比屏幕尺寸或超级视图大。是吗?
  • 伙计们,是的,我正在使用自动布局。问题是,当我将 tableview 作为 viewcontroller.view 的第一个子项时,会出现错误。如果唯一的区别是它后面的 tableview 的同一层次结构级别中的任何视图,i。例如,如果我的 tableview 不是索引为 0 的子视图,那么一切正常。 UITableVIewController 也是如此。但是,我没有找到解决方法。

标签: ios objective-c iphone uitableview scroll


【解决方案1】:

之所以出现问题,是因为在项目的某个时间点,UITabBarControllerUITabBar 被覆盖,底部布局指南受到影响。现在,我只是隐藏了原生标签栏并将我需要的视图放在它上面。在这种情况下,原生 Tab Bar 仍然存在,隐藏但存在,因此布局指南。

【讨论】:

    【解决方案2】:

    看起来表格视图的框架比屏幕尺寸大。这就是为什么没有出现滚动指示器的原因。当您添加一个透明视图作为表视图的父视图时,您会以某种方式影响该表视图的大小调整。尝试检查 table view 的框架,然后使用它的布局约束。

    更新: 我获取了 PO 的代码,发现(在 iPhone 6 模拟器上)表格视图有 frame = (0 0; 375 667) 和 contentSize: {600, 0}。这就是为什么没有出现滚动指示器的答案。内容大小是“错误的”,因为没有指定数据源。 然后,当我指定一个数据源并在第 0 部分的行计数返回 28 时,我遇到了一个异常。该异常表示:“无法从其数据源获取单元格”。那是因为 UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 返回 nil(这是预期的 BTW)。实例化表格视图单元格的正确方法是这样的:

     - (__kindofUITableViewCell * _Nullable)dequeueReusableCellWithIdentifier:(NSString * _Nonnull)identifier
    

    ...但这是一个完全不同的故事。希望这会有所帮助。

    【讨论】:

    • 不,我没有添加透明视图作为我的 tableview 的父级。我需要做的是解决这个错误,但是,将一个视图放在我的 tableview 的相同层次结构级别,但是,作为第一个孩子。如果 tableview 是 viewcontroller.view 的索引 0 的子视图,则会出现错误。
    • 这很奇怪。你能分享你正在处理的代码吗?还是一个示例“越野车”项目?
    • 我不知道为什么,但我创建了另一个简单的项目,行为很正常。但是,这段代码显示了我对静态表视图所做的事情。我只是在修改字体和类似的东西。 snipt.net/embed/9292acef4e7fb1c747af187f1b2a099e 代码非常简单。只需 5 行真实代码。我的项目是使用 xCode 6 创建的,现在我使用的是 xCode 7。这可能是原因吗?因为我在这里从头开始创建的项目有效。
    • 每次更新 Xcode 时,都会遇到“幻影”问题。顺便说一句,sn-p 显示为 js+HTML 代码:)
    • 我有一个关于 UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 的问题您是否从 UITableViewController 继承了 SettingsViewController?
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    相关资源
    最近更新 更多