tableView 部分 headers 消失 SWIFT
tableView section headers disappear SWIFT
我有一个 tableView 设置,当一个单元格被触摸时,它会扩展高度以显示更多信息。 table视图有 5 个部分。
我有一个错误:当一个单元格展开时,该单元格下面的所有 headersCells 都会变得不可见。控制台输出以下内容:“[31233:564745] 没有 table 正在重用的单元格的索引路径”
在我的故事板中,我有 2 个自定义单元格:"myCell"
用于数据承载单元格,"headerCell"
用于 headers。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]
if self.currentPath != nil && self.currentPath == indexPath {
self.currentPath = nil
} else {
self.currentPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}
如果我在 begin/end 更新之间输入 tableView.reloadData()
,它可以正常运行,尽管 header 背景变黑并失去动画效果。
我在 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
中声明了 header 的所有内容
我错过了什么?我非常希望 tableView 仍然有动画,并保留背景 clearColor()
。
提前致谢。我确实通读了 objective C 个答案,但无法让它们为我工作。我非常感谢 SWIFT 的帮助。
我认为问题是 table 单元格没有索引路径被重用。
我在控制台输出中找到了答案。在 header 函数中使用此代码:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
不要 return 您的 headerCell
或您的可重复使用标识符。 Return reuseIdentifier.contentView
。对我来说是:return headerCell!.contentView
.
由于我还没有达到 50 声望,我无法对之前的答案发表评论,所以我很抱歉将此列为另一个答案。
返回 ContentView 将使该函数起作用,但会删除对 reuseIdentifier (headerCell) 所做的所有格式设置
headerCell.backgroundColor = UIColor.cyanColor()
这不会为您的 headerCell 提供青色
要解决此问题,只需将“.contentView”添加到您的格式行
headerCell.contentView.backgroundColor = UIColor.cyanColor()
补充一下,当我可以很清楚地看到它在那里时,为什么我不能引用我的单元格的 contentView,我感到困惑的时间比我应该的要长。我的自定义 class(使用 UITableViewCell 而不是 UITableViewHeaderFooterView)每次都会 return 出现致命错误。因此,请确保在 UITableViewHeaderFooterView class 下设置了任何自定义样式,例如:
class CustomHeaderCell: UITableViewHeaderFooterView {
您还需要像这样注册 resuableIdentifer:
tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")
然后这个坏小子:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
return headerCell!.contentView
}
Table 在 2 table 秒内查看 headers 当我将我的应用程序转换为 IOS 时消失了 10 - 我在 Apple 开发人员中找到了原因 API关于 table headers 的文档。当我添加以下内容时,丢失的 headers 又出现了!
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}
我遇到了同样的错误,因为我 return 使用出列方法而不是 UITableViewHeaderFooterView
对单元格进行处理。
解决方案:
- 在视图层次结构之外添加一个视图
- 设置类型为
UITableViewHeaderFooterView
- 自定义
- Link 到
@IBOutlet
- 在
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
return出口
常见陷阱:
不要忘记设置页眉大小
不要忘记将插座设置为强。
您可以将 TableViewCell
包裹在 UIView
中
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 50)) // 50 = Header height
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
headerCell.frame = containerView.bounds
containerView.addSubview(headerCell)
return containerView
}
我有一个 tableView 设置,当一个单元格被触摸时,它会扩展高度以显示更多信息。 table视图有 5 个部分。
我有一个错误:当一个单元格展开时,该单元格下面的所有 headersCells 都会变得不可见。控制台输出以下内容:“[31233:564745] 没有 table 正在重用的单元格的索引路径”
在我的故事板中,我有 2 个自定义单元格:"myCell"
用于数据承载单元格,"headerCell"
用于 headers。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row]
if self.currentPath != nil && self.currentPath == indexPath {
self.currentPath = nil
} else {
self.currentPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}
如果我在 begin/end 更新之间输入 tableView.reloadData()
,它可以正常运行,尽管 header 背景变黑并失去动画效果。
我在 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
我错过了什么?我非常希望 tableView 仍然有动画,并保留背景 clearColor()
。
提前致谢。我确实通读了 objective C 个答案,但无法让它们为我工作。我非常感谢 SWIFT 的帮助。
我认为问题是 table 单元格没有索引路径被重用。
我在控制台输出中找到了答案。在 header 函数中使用此代码:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
不要 return 您的 headerCell
或您的可重复使用标识符。 Return reuseIdentifier.contentView
。对我来说是:return headerCell!.contentView
.
由于我还没有达到 50 声望,我无法对之前的答案发表评论,所以我很抱歉将此列为另一个答案。
返回 ContentView 将使该函数起作用,但会删除对 reuseIdentifier (headerCell) 所做的所有格式设置
headerCell.backgroundColor = UIColor.cyanColor()
这不会为您的 headerCell 提供青色
要解决此问题,只需将“.contentView”添加到您的格式行
headerCell.contentView.backgroundColor = UIColor.cyanColor()
补充一下,当我可以很清楚地看到它在那里时,为什么我不能引用我的单元格的 contentView,我感到困惑的时间比我应该的要长。我的自定义 class(使用 UITableViewCell 而不是 UITableViewHeaderFooterView)每次都会 return 出现致命错误。因此,请确保在 UITableViewHeaderFooterView class 下设置了任何自定义样式,例如:
class CustomHeaderCell: UITableViewHeaderFooterView {
您还需要像这样注册 resuableIdentifer:
tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")
然后这个坏小子:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell!
return headerCell!.contentView
}
Table 在 2 table 秒内查看 headers 当我将我的应用程序转换为 IOS 时消失了 10 - 我在 Apple 开发人员中找到了原因 API关于 table headers 的文档。当我添加以下内容时,丢失的 headers 又出现了!
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
{
return 44 // where 44 is the header cell view height in my storyboard
}
我遇到了同样的错误,因为我 return 使用出列方法而不是 UITableViewHeaderFooterView
对单元格进行处理。
解决方案:
- 在视图层次结构之外添加一个视图
- 设置类型为
UITableViewHeaderFooterView
- 自定义
- Link 到
@IBOutlet
- 在
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
return出口
常见陷阱:
不要忘记设置页眉大小 不要忘记将插座设置为强。
您可以将 TableViewCell
包裹在 UIView
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let containerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 50)) // 50 = Header height
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") }
headerCell.frame = containerView.bounds
containerView.addSubview(headerCell)
return containerView
}