我已经设置了正确的委托和数据源联系的实现代码如下..的reloadData方法调用的数据源和除委托方法viewForHeaderInSection:
为什么会这样?
我已经设置了正确的委托和数据源联系的实现代码如下..的reloadData方法调用的数据源和除委托方法viewForHeaderInSection:
为什么会这样?
采用tableView:viewForHeaderInSection:
要求您还实现了tableView:heightForHeaderInSection:
这应该返回一个适当的非零高度的头部。 另外,还要确保你不也实现了tableView:titleForHeaderInSection:
您应该只使用一个或另一个( viewForHeader
或titleForHeader
)。
诀窍是,这两种方法属于不同UITableView
协议: tableView:titleForHeaderInSection:
是一个UITableViewDataSource
协议的方法,其中tableView:viewForHeaderInSection
属于UITableViewDelegate
。
这意味着:
如果要实现的方法,但指定自己只作为dataSource
的UITableView
, tableView:viewForHeaderInSection
你的执行将被忽略,不会被调用。
tableView:viewForHeaderInSection
具有更高的优先级。 如果你同时实现的方法和分配自己作为两个dataSource
和delegate
的UITableView
,你将返回节头,但你的意见tableView:titleForHeaderInSection:
将被忽略。
出于研究目的,我已删除了我tableView:heightForHeaderInSection:
; 它工作得很好,似乎不影响上述过程。 但是,评论文档指出,它是必需的tableView:viewForHeaderInSection
正常工作; 因此为了安全起见明智的做法是实现这一点。
@rmaddy说错了规则,两次:在现实中, tableView:viewForHeaderInSection:
不需要 ,你还实现了tableView:heightForHeaderInSection:
而且它是完全没有同时调用titleForHeader
和viewForHeader
。 我会正确地陈述规则仅仅是为了记录:
规则很简单,就是viewForHeader
将不会被调用,除非你以某种方式给头部的高度。 您可以通过以下三种方式的任意组合做到这一点:
实施tableView:heightForHeaderInSection:
设置表格的sectionHeaderHeight
。
呼叫titleForHeader
(这在某种程度上使头默认高度,如果它不以其他方式之一)。
如果你没有这些东西,你就没有头和viewForHeader
不会被调用。 这是因为没有一个高度,运行时将不知道如何调整视图大小,所以它不会刻意去要求一个。
给予estimatedSectionHeaderHeight
和sectionHeaderHeight
值固定我的问题。 例如, self.tableView.estimatedSectionHeaderHeight = 100 self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
去关rmaddy的回答,我试图隐藏标题视图和返航0.0F‘的tableView:heightForHeaderInSection’,并从0高度查看tableView:viewForHeaderInSection
。
从改变后return 1.0f
到return 0.0f
中tableView:heightForHeaderInSection
,委托方法tableView:viewForHeaderInSection
确实调用。
原来我想要的效果的作品,而不必使用“的tableView:heightForHeaderInSection”; 但是这可能是给其他人谁是有一个问题让“的tableView:heightForHeaderInSection”有用的委托方法调用。
值得一提的简单,如果你的执行tableView:heightForHeaderInSection:
返回UITableViewAutomaticDimension
,然后tableView:viewForHeaderInSection:
不会被调用。
UITableViewAutomaticDimension
假定标准UITableViewHeaderFooterView
将被使用的是被填充有委托方法tableView:titleForHeaderInSection:
从评论UITableView.h
:
从返回这个值
tableView:heightForHeaderInSection:
或tableView:heightForFooterInSection:
结果在适合的价值的高度,从返回tableView:titleForHeaderInSection:
或tableView:titleForFooterInSection:
如果标题不为零。
您应该实现tableView:heightForHeaderInSection:
并设置页眉> 0的高度。
此委托方法与随之而来viewForHeaderInSection:
方法。
我希望这有帮助。
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 40;
}
我刚刚与标题不显示为iOS 7.1,但做工精细用更高版本我已经测试,明确地8.1和8.4的问题。
对于完全相同的代码,7.1并没有调用任何节头的委托方法可言,包括: tableView:heightForHeaderInSection:
和tableView:viewForHeaderInSection:
实验后,我发现, 除去我此行viewDidLoad
取得头重新出现7.1并没有影响我测试的其他版本:
// _Removing_ this line _fixed_ headers on 7.1
self.tableView.estimatedSectionHeaderHeight = 80;
......所以,似乎有某种冲突的有7.1,至少。
同样的问题发生在我身边但是,因为我是用在Xcode 9 自动高度计算 ,如上面提到的,我不能给任何明确的高度值。 经过一番试验我的解决方案 ,我们必须重写此方法,
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForHeaderInSection:(NSInteger)section
{
return 44.0f;
}
虽然我已检查这两个选项
从故事板作为苹果说,但我仍然得到这个奇怪的错误。
请注意 :此错误是只能显示在IOS-10的版本不是IOS-11版本。 也许这是在Xcode的错误。 谢谢
下面是我发现( 斯威夫特4)(感谢这个评论对另一个问题)
无论我用titleForHeaderInSection或viewForHeaderInSection - 这并不是说他们在tableview中已滚动并加载新的细胞并没有获得所谓的,但我对headerView的为textLabel所做的任何字体选择只出现在什么是负载最初可见,而不是表中滚动。
整个解决方案willDisplayHeaderView:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let header = view as? UITableViewHeaderFooterView {
header.textLabel?.font = UIFont(name: yourFont, size: 42)
}
}
有时制定tableview.delegate
或datasource = nil
在viewWillAppear:
或viewDidAppear:
方法可能导致此问题。 确保没有做到这一点...
我剪切和粘贴从斯威夫特2项目的以下两种方法在我的斯威夫特3项目,从来没有因为斯威夫特3这些方法必须有一个名为“ - ”前的第一个参数名称。
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44.0
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: B2BTrolleyHeaderFooterView.reuseIdentifier) as! B2BTrolleyHeaderFooterView
return headerView
}