在UITableView中显示单元格的奇怪问题

时间:2017-10-13 16:55:34

标签: ios iphone swift uitableview

我有UITableView方法:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
override func numberOfSections(in tableView: UITableView) -> Int
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

所以,问题是Xcode首先运行

override func numberOfSections(in tableView: UITableView) -> Int

返回给我1。 之后它会运行override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int,这也会让我返回1。

但是我不知道为什么在这两种方法之后它没有运行cellForRowAt方法并且在我的UITableView上没有显示任何行。

我不知道那里发生了什么以及为什么会这样。 你遇到过这样的问题,请你帮忙解决一下吗?

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let fetchedResultsController = self.fetchedResultsController, let fetchedObjects = fetchedResultsController.fetchedObjects {
        if !searchController.isActive {
            print("numberOfRowsInSection fetchedObjects.count - \(fetchedObjects.count)")
            return fetchedObjects.count
        } else {
            if let results = filteredResult[searchController.searchBar.selectedScopeButtonIndex] {
            print("numberOfRowsInSection results.count - \(results.count)")
                return results.count
            }
        }
    }
    print("numberOfRowsInSection - 0")
    return 0
}

override func numberOfSections(in tableView: UITableView) -> Int {
    if let frc = fetchedResultsController, frc.fetchedObjects?.count != 0 {      
        print("numberOfSections - 1")                              
        return 1
    } else {
        print("numberOfSections - 0")            
        return 0
    }
}

1 个答案:

答案 0 :(得分:0)

可能发生的情况是您的手机单元的高度为0。发生这种情况时,即使其他方法返回非零cellForRowAt / section计数,也不会调用row

我猜测为什么会这样,你可能正在为你的单元格使用自动布局,但是你的约束不允许单元格找出它自己的高度。您可能在不知情的情况下使用自动布局,因为在iOS 11上,它现在是默认设置。如果您使用的是故事板,则可以在属性检查器中设置单元格原型的高度,而不是选中automatic框。或者,您可以使用tableView.rowHeight或通过实施func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat

在代码中进行设置