未分配给父 UIViewController 视图属性时,UITableView 不滚动

Posted

技术标签:

【中文标题】未分配给父 UIViewController 视图属性时,UITableView 不滚动【英文标题】:UITableView not scrolling when not assigned to parents UIViewController view property 【发布时间】:2011-12-10 22:52:15 【问题描述】:

我已将 UITableView 放在 UIViewController 中,并将代码从 UITableViewController 复制到我的 UIViewController 以使其使用 UITableViewControllers 默认实现实现“表数据协议”,并遵循http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10s 章节“以编程方式创建表视图”(使用 ViewDidLoad 而不是 LoadView,因为我使用 IB 并有一个笔尖,我为 UITableView 创建了一个名为 tableView 的插座。

现在在上面的链接章节中,UITableView 被分配给 self.view,这是 UIViewController 的 UIView 属性。然后滚动 UITableView 正在工作,但 UITableView 填充了整个屏幕,隐藏了其他视图内容,例如 UIToolbar - 可能因为它是分配给视图属性后的唯一内容。

如果我省略分配,其他视图内容就位,并且所有内容的大小都正确,但是 UITableView 不会滚动。

如何在 UIViewController 中实现 UITableView 的滚动,同时 UIVC 具有静态内容(例如工具栏)?

以下是相关代码:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad

    [super viewDidLoad];
    tableView.delegate = self;
    tableView.dataSource = self;
    [tableView reloadData];
    //self.view = tableView;

【问题讨论】:

你需要在文本和代码之间有一个清晰的段落才能启动标记。我为你改变了这个。 【参考方案1】:

如果您在界面构建器中添加的视图控制器中有其他内容,那么这将是 UIViewController 的 .view 属性的一部分 - 当您将表格视图分配给它时,您将删除所有这些内容。

如果您的表格视图正常显示但没有滚动(选择怎么样?这有效吗?)您可能禁用了用户交互。

您在 cmets 中提到,您的表格视图中只有空单元格 - 我认为这是您的问题的原因。我刚刚创建了一个示例项目,我在表格视图中添加了作为视图控制器视图的子视图,并且滚动很好 - 这是我在那里填充 100 个虚拟行。如果我没有为数据源和委托方法返回任何内容,则表视图不会滚动。

【讨论】:

感谢您的标记更正。用户交互已启用。唯一的区别是上面代码中的最后一行:self.view=tableView。除了空单元格之外,没有任何内容可供选择。 好的,我将在这里尝试一个示例项目,看看我是否可以重现 - 这不会有一段时间,因为它是一天的结束。 您是否在表格视图或全局视图上检查了用户交互? (如果表格视图启用了用户交互但不是全局交互,那么一切都会有意义) 全局视图已启用 ui。表格视图位于全局视图中,并且 ib 不会在其属性检查器中发布 ui 复选框。我试过 tableView.userInteractionEnabled = YES;以编程方式。它没有帮助。不过感谢您的指点! 我已经尝试过我的示例项目 - 我认为您的问题是您还没有表格视图的数据。查看更新的答案。

以上是关于未分配给父 UIViewController 视图属性时,UITableView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 的视图未由 viewWillAppear() 调整大小 [重复]

类未显示 NIB 的视图

UIViewController _loadViewFromNibNamed:bundle: 加载了“视图”笔尖,但未设置视图出口。

在视图是 UIScrollview 的子视图的 UIViewController 中未收到 NSNotification

单个 UIViewController 中的多个集合视图未调用 cellForItemAtIndexPath indexPath

了解分配仪器保留计数