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】:
您应该定义headerview
与tableview
相同的宽度和您需要的高度。不要给出单元格的高度或宽度。如果你使用storyborard for ui然后将uiview拖到上边的tableview上它会自动设置为headerview然后给top,leading,trailing and fix heigth constraints
并删除viewForHeaderInSection
方法。
希望这会有所帮助:)
【讨论】:
这项工作,但我需要 viewForHeaderInSection,因为我在一个表格视图中有许多动态创建的部分,其中包含不同的文本,我需要将 UITapGestureRecognizer 添加到某些标题中,女巫将展开或折叠此部分以上是关于viewForHeaderInSection 宽度不正确的主要内容,如果未能解决你的问题,请参考以下文章
viewForHeaderInSection 对齐错误(Swift 3)