我已经浏览了有关UITableView类和委托引用的Apple文档,但无法找到明确设置表头高度的方法。
我使用以下委托设置表格单元格高度:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
并使用以下代理设置节头/页脚高度。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
有人可以帮我设置表格页眉/页脚高度吗?
感谢。
答案 0 :(得分:59)
只需设置tableHeaderView的frame属性。
答案 1 :(得分:57)
我找到了一个很好的黑客。修改框架属性后添加以下行
self.tableView.tableHeaderView = self.tableView.tableHeaderView;
诀窍是(我认为)当你将视图分配给tableHeaderView属性时,UITableView正在缓存高度(实际上是帧)。上面这行只是重新分配了高度。
答案 2 :(得分:33)
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
sizeHeaderToFit()
}
private func sizeHeaderToFit() {
let headerView = tableView.tableHeaderView!
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
}
可以找到更多详细信息here
答案 3 :(得分:9)
如果您仍然需要它,您是否尝试过设置属性
self.tableView.tableHeaderView
如果您计算所需的高度,并为tableHeaderView
设置新视图:
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;
self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];
它应该有用。
答案 4 :(得分:6)
只有当我将tableview的页脚/标题设置为nil时才能与我合作:
self.footer = self.searchTableView.tableFooterView;
CGRect frame = self.footer.frame;
frame.size.height = 200;
self.footer.frame = frame;
self.searchTableView.tableFooterView = nil;
self.searchTableView.tableFooterView = self.footer;
确保self.footer是一个强大的参考,以防止页脚视图被解除分配
答案 5 :(得分:4)
Swift 4 - 您可以使用HEIGHT_VIEW管理身高,只需添加此鳕鱼,其工作
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let HEIGHT_VIEW = 60
tableView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
tableView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
}
答案 6 :(得分:2)
使用构造函数UIView(frame:_)
创建页脚包装器视图
然后,如果您正在为FooterView使用xib文件,请从xib创建视图并将其作为subView添加到包装器视图。然后将包装器分配给tableView.tableFooterView = fixWrapper
。
let fixWrapper = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 54)) // dont remove
let footer = UIView.viewFromNib("YourViewXibFileName") as! YourViewClassName
fixWrapper.addSubview(footer)
tableView.tableFooterView = fixWrapper
tableFootterCostView = footer
它对我来说很完美!重点是使用构造函数(frame:_)
创建页脚视图。即使您创建了UIView()并指定了frame属性,它也可能不起作用。
答案 7 :(得分:1)
@kris答案对我在Objective-C中需要它的人很有帮助。
这是代码
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
[self sizeHeaderToFit];
}
-(void)sizeHeaderToFit{
UIView *headerView = self.tableView.tableHeaderView;
[headerView setNeedsLayout];
[headerView layoutIfNeeded];
CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect frame = headerView.frame;
frame.size.height = height;
headerView.frame = frame;
self.tableView.tableHeaderView = headerView;
}
答案 8 :(得分:1)
如果您以编程方式设置tableHeaderView
,则只需将其设置在viewDidLayoutSubviews
内即可。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setupTableViewHeader()
}
private func setupTableViewHeader() {
// Something you do to set it up programatically...
tableView.tableHeaderView = MyHeaderView.instanceFromNib()
}
如果您未通过编程方式进行设置,则需要执行类似@Kris基于此link的回答
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
sizeHeaderToFit()
}
private func sizeHeaderToFit() {
if let headerView = tableView.tableHeaderView {
headerView.setNeedsLayout()
headerView.layoutIfNeeded()
let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
var frame = headerView.frame
frame.size.height = height
headerView.frame = frame
tableView.tableHeaderView = headerView
}
}
答案 9 :(得分:1)
您可以创建具有所需高度(宽度应为UITableView的高度)的UIView,并在其中放置具有适当尺寸图片的UIImageView:它们不会自动拉伸。
您还可以通过为容器视图提供更高的高度,在内部UIImageView的上方和下方提供边距。
例如,您还可以分配一个“转换”转换,以将图像放置在其容器标题视图的中间。
答案 10 :(得分:1)
如果您将XIB用于tableView的主headerView,则可以将XIB设置为自由格式,并根据需要设置高度,然后单击Autoresizing的顶部,底部块和上部,下部箭头,仅选择水平块。我在上面提到过。
答案 11 :(得分:1)
如果在IB中添加视图作为表标题视图,请在标签5(尺寸检查器)中的IB中设置该视图的框架
答案 12 :(得分:0)
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}
或者您也可以这样使用
tableView.estimatedSectionHeaderHeight
答案 13 :(得分:0)
答案 14 :(得分:-1)
使用自动布局,您可以执行以下操作:
tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = <your-header-height>
或者如果您的标题高度不同,请继续执行:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return <your-header-height>
}
答案 15 :(得分:-1)
如果您更改了tableView的headerView的高度,只需使用这些代码来更新tableView:
Objc:
[tableView beginUpdates];
tableView.endUpdates()
夫特:
tableView.beginUpdates()
tableView.endUpdates()
答案 16 :(得分:-1)
使用表格视图默认属性:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 35.0;
}
由于