viewForHeaderInSection 宽度不正确

Posted

技术标签:

【中文标题】viewForHeaderInSection 宽度不正确【英文标题】:viewForHeaderInSection incorrect width 【发布时间】:2016-04-18 17:57:55 【问题描述】:

我的 headerView 的宽度不适应屏幕的宽度。 我的viewForHeaderInSection函数:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
    let cell = self.tableView.dequeueReusableCellWithIdentifier("sectionCell") as! sectionCell
    cell.hint.text = "some name"

    cell.tag = section


    let singleTap = UITapGestureRecognizer(target: self, action: #selector(singleTapOnSection(_:)))

    cell.addGestureRecognizer(singleTap)

    let view = UIView(frame: cell.frame)

    view.addConstraints(cell.constraints)

    view.addSubview(cell)

    return view

我必须将单元格添加到 UIView(或类似的东西),因为我在该部分中隐藏了行。 在我看来,我必须以编程方式添加“查看”一些约束,但我不知道如何

【问题讨论】:

我在这里回答了另一种处理方法,但我认为你的问题是;您正在添加 cell 作为视图的子视图,但您必须添加 cell.contentView 代替。并且也代替cell.constraints,使用cell.contentView.constraints 【参考方案1】:

定义一个customView: UITableViewHeaderFooterView类,并在View Controller的viewDidLoad:中写入

tableView.registerClass(customView.classForCoder(), forHeaderFooterViewReuseIdentifier: "HeaderIdentifier")

而不是将单元格出列,而是将UITableViewHeaderFooterView出列(因为这是正确的做法)。

这种方式你必须在代码中添加自动布局或在 nib 文件中定义它,使用 nib 和处理各种事情有点令人沮丧,如果你使用这种方法我建议使用这个库NibDesignable。

【讨论】:

this page 描述了这种方式,但这给了我一些警告和错误,我无法让它工作 “无法在包中加载 NIB”,没有什么可以解释问题所在 你看NibDesignable了吗?它真的很容易使用,你不必再担心笔尖加载和其他东西了。 要使用 NibDesignable 以及 reusableCells 和 reusableViews,请检查 here。【参考方案2】:

您应该定义headerviewtableview 相同的宽度和您需要的高度。不要给出单元格的高度或宽度。如果你使用storyborard for ui然后将uiview拖到上边的tableview上它会自动设置为headerview然后给top,leading,trailing and fix heigth constraints并删除viewForHeaderInSection方法。

希望这会有所帮助:)

【讨论】:

这项工作,但我需要 viewForHeaderInSection,因为我在一个表格视图中有许多动态创建的部分,其中包含不同的文本,我需要将 UITapGestureRecognizer 添加到某些标题中,女巫将展开或折叠此部分

以上是关于viewForHeaderInSection 宽度不正确的主要内容,如果未能解决你的问题,请参考以下文章

ViewForHeaderInSection 中的两个标题

滚动时 viewForHeaderInSection 消失

如何旋转 viewForHeaderInSection

viewForHeaderInSection 对齐错误(Swift 3)

tableView:viewForHeaderInSection: 如何准确工作以及如何动态自定义此视图

viewForHeaderInSection 绘制背景但仅当视图位于屏幕顶部时