Swift TableViewCells not showing up



我得到了一个ViewController,里面有两个UITableView。 它们都从同一对象获取数据,但从该对象内的不同数组获取数据。

我的第二个表格视图没有显示所有项目,只有 5 个。

表视图本身既是动态的,也是大小的。

这是我的cellForRowAt函数:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == tableViewSteps,  //This is the table that doesn't show right
let cell = tableView.dequeueReusableCell(withIdentifier: "stepsCell", for: indexPath) as? StepsTableViewCell {
let text = detailItem?.itemStepAr[indexPath.row] as! String
cell.textAreaOutlet.text = "Schritt (indexPath.row + 1) n(text)"
let textAsNSString = cell.textAreaOutlet.text as NSString
let lineBreakRange = textAsNSString.range(of: "n")
let newAttributedText = NSMutableAttributedString(attributedString: cell.textAreaOutlet.attributedText)
let boldRange: NSRange
if lineBreakRange.location < textAsNSString.length {
boldRange = NSRange(location: 0, length: lineBreakRange.location)
} else {
boldRange = NSRange(location: 0, length: textAsNSString.length)
}
newAttributedText.addAttribute(NSAttributedString.Key.font, value: UIFont.preferredFont(forTextStyle: UIFont.TextStyle.headline), range: boldRange)
cell.textAreaOutlet.attributedText = newAttributedText
let fixedWidth = cell.textAreaOutlet.frame.size.width
let newSize = cell.textAreaOutlet.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
cell.textAreaOutlet.frame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height)
cell.textAreaOutlet.isScrollEnabled = false
tableStepsHeight = tableStepsHeight + Int(newSize.height)
cell.textAreaOutlet.textColor = UIColor.lightGray
tableViewSteps.frame = CGRect(x:0, y: currentViewHeight + 20, width: 375, height: tableStepsHeight)
changeScrollHeight()
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "ingredsCell")! //1.
let text = detailItem?.itemIngredAr[indexPath.row]
cell.textLabel?.text = text as? String
cell.textLabel?.font = UIFont(name: "Futura-Medium", size: 17)
cell.textLabel?.textColor = UIColor.lightGray
return cell
}
}

如前所述,第一个表视图是无法正常工作的表视图。 当我使用调试器观看它时,它只运行 5 次,但数组中有更多的项目。

编辑:

这是我numberOfRowsInSection函数

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (tableView == tableViewSteps) {
return detailItem?.itemStepAr.count ?? 0
}
else {
return detailItem?.itemIngredAr.count ?? 0
}
}

编辑 2:

当我在TableView中启用滚动,然后尝试滚动时,将显示所有项目。但是应该禁用滚动,因为它会自动调整大小(有效)

最终编辑:

我在tableView中添加了更多高度并启用了滚动(但禁用了反弹,因此您看不到滚动中的任何内容)

现在它加载正常,一切正常

UITableView适用于回收UITableViewCell。这意味着表视图只会首先加载可见单元格,并且只有在滚动时,它才会加载更多单元格(通过回收旧单元格)。

我可以看到的问题是,您可以尝试获取表视图的高度,以更新高度约束(以便表视图完整显示)。但这可能是一个不正确的计算(如前所述,它只实例化前 x 个单元格,因此它无法知道其余单元格的高度)。此外,此计算永远不应从cellForRowAt执行,因为该方法不应在单元格外执行操作(除非您想知道单元格何时变得可见)。

您可以通过使所有单元格都具有预定义的高度,然后将其乘以单元格数来解决此问题。

如果您有自调整大小的单元格,则无法完成(阅读:可以完成,但它太笨拙且效率低下,不实用)。

您可以尝试将应在表格视图上方和下方滚动的所有其他视图放入表格视图单元格中。然后,您只需使用常规表格视图,无需花哨的高度约束和计算。

最新更新