UIView没有填充表视图tableHeaderView属性swift

时间:2016-01-26 18:52:17

标签: ios iphone swift uitableview uiview

我有一个非常特殊的情况,想知道它为什么会发生。我在视图中有一个编辑框和按钮,我将其放入tableview的tableHeaderView属性中。我将此视图称为InputToListCell。

现在,当视图扩展UIView时,我得到以下内容:

enter image description here

,即我在代码中所做的更改是:

class InputToListCell: UIView{
   //Code Here
}

然后我更改InputToListCell以扩展UITableViewCell并获得以下内容:

enter image description here

class InputToListCell: UITableViewCell{
   //Code Here
}

为什么会出现这种情况?我不明白为什么因为UITableViewCell扩展了UIView。有什么想法吗?

更新

基于此处的评论是InputToListCell的约束:

enter image description here

除了编辑文本的尾随值之外,我基本上将编辑文本和添加按钮约束都固定到边距。

1 个答案:

答案 0 :(得分:0)

简而言之

对表视图元素使用UITableViewCell

self.tableView.tableHeaderView =
    tableView.dequeueReusableCellWithIdentifier("sectionIdentifier")

<强>讨论

对所有表格视图元素使用UITableViewCell对象不仅在UITableView中显示时提供了保护伞行为,而且还允许从.storyboard.xib加载,额外的奖励和凝聚力。

因此,即使tableHeaderView(以及此问题viewForHeaderInSection)非正式地只是UIView,您也可以返回UITableViewCell。根据{{​​3}},要在tableHeaderView中利用Autolayout,你需要做一些体操:

if let tableHeaderView = tableView.dequeueReusableCellWithIdentifier("tableHeaderViewIdentifier") {
    tableHeaderView.setNeedsLayout()
    tableHeaderView.layoutIfNeeded()

    let height = tableHeaderView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    var frame = tableHeaderView.frame

    frame.size.height = height
    tableHeaderView.frame = frame
    self.tableView.tableHeaderView = tableHeaderView
}

来自不同的帖子:

this post

有关如何使用.storyboard.xib标题(包括Xcode项目)的完整示例,请参阅Two Section Headers