我有一个非常特殊的情况,想知道它为什么会发生。我在视图中有一个编辑框和按钮,我将其放入tableview的tableHeaderView属性中。我将此视图称为InputToListCell。
现在,当视图扩展UIView时,我得到以下内容:
,即我在代码中所做的更改是:
class InputToListCell: UIView{
//Code Here
}
然后我更改InputToListCell以扩展UITableViewCell并获得以下内容:
即
class InputToListCell: UITableViewCell{
//Code Here
}
为什么会出现这种情况?我不明白为什么因为UITableViewCell扩展了UIView。有什么想法吗?
更新
基于此处的评论是InputToListCell的约束:
除了编辑文本的尾随值之外,我基本上将编辑文本和添加按钮约束都固定到边距。
答案 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
}
来自不同的帖子: