编辑:对于iOS 6及更高版本,应考虑DJ-S提供的答案。接受的答案已过期。
#1 楼
希望通过UITableViewDelegate
协议使用此方法可以入门:Objective-C:
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
if (section == integerRepresentingYourSectionOfInterest)
[headerView setBackgroundColor:[UIColor redColor]];
else
[headerView setBackgroundColor:[UIColor clearColor]];
return headerView;
}
Swift:
func tableView(_ tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView!
{
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
if (section == integerRepresentingYourSectionOfInterest) {
headerView.backgroundColor = UIColor.redColor()
} else {
headerView.backgroundColor = UIColor.clearColor()
}
return headerView
}
更新到2017年:
Swift 3:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
if (section == integerRepresentingYourSectionOfInterest) {
headerView.backgroundColor = UIColor.red
} else {
headerView.backgroundColor = UIColor.clear
}
return headerView
}
用您想要的
[UIColor redColor]
替换UIColor
。您可能还希望调整headerView
的尺寸。评论
它还可以使用self.tableView.sectionHeaderHeight来帮助调整节标题的大小。否则,您可能无法查看显示的节标题文本。
–托尼·伦兹(Tony Lenzi)
10年1月23日在20:56
可与[UIColor xxxColor]正常工作,但是当我尝试可以从photoshop中获得的自定义颜色时(因此使用UIColor red:green:blue:alpha:只是白色。我做错什么了吗?
–马泰
13年4月9日,1:16
发布一个单独的问题,我们将尽力提供帮助。包括源代码。
– Alex Reynolds
13-4-9在7:29
请注意,此答案(虽然正确)将仅返回不包含任何内容的UIView。
– Greg M. Krsak
13-10-14在19:06
这是非常过时的信息,仅创建另一个视图并不是最佳答案。其想法是获得正确的视图并更改其颜色或色调。下面使用willDisplayHeaderView的答案是一种更好的方法。
– Alex Zavatone
2015年11月4日13:52
#2 楼
这是一个老问题,但是我认为答案需要更新。此方法不涉及定义和创建自己的自定义视图。
在iOS 6及更高版本中,您可以轻松地通过定义
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
部分委托方法
来更改背景色和文本颜色,例如:
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
// Background color
view.tintColor = [UIColor blackColor];
// Text Color
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
[header.textLabel setTextColor:[UIColor whiteColor]];
// Another way to set the background color
// Note: does not preserve gradient effect of original header
// header.contentView.backgroundColor = [UIColor blackColor];
}
摘自我的帖子:
https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/
Swift 3/4
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
view.tintColor = UIColor.red
let header = view as! UITableViewHeaderFooterView
header.textLabel?.textColor = UIColor.white
}
评论
我什至不知道它甚至已添加到SDK中。辉煌!绝对正确的答案。
– JRod
2014年1月7日23:49
OP-请更新对此答案的接受答案。比旧方法干净得多。
–凯尔·克莱格(Kyle Clegg)
2014年1月27日22:17
这似乎不适用于我。文字颜色有效,但标题背景的色彩无效。我在iOS 7.0.4上
– Zeeple
2014年2月7日在16:30
user1639164,您可以使用header.backgroundView.backgroundColor = [UIColor blackColor];设置标题背景的色调。
–慭慭流觞
2014年5月8日在2:29
@Kent显然已经有一段时间了,但是对于未来的人们来说header.contentView.backgroundColor = [UIColor blackColor];选项将为您提供不透明的标题
–SparkyRobinson
17-10-10在23:10
#3 楼
这是更改文本颜色的方法。UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease];
label.text = @"Section Header Text Here";
label.textColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.75];
label.backgroundColor = [UIColor clearColor];
[headerView addSubview:label];
评论
谢谢DoctorG-这很有用。顺便说一句-为了保留dataSource提供的现有标签,我修改了第二行,如下所示:label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section];可能是不好的形式,但对我有用。也许这可以帮助其他人。
– JJ Rohrer
2011-3-16在16:25
@JJ这种形式实际上很好,因为您正在调用最初用于定义表的节头的方法。
– Tim
2011年6月11日18:44
我删除了自动发行版,并将其更改为显式发行版。 UITableView格式化方法被调用很多次。尽可能避免使用自动释放。
–备忘录
2011-6-30在22:54
@Harkonian,而不是更改提交的答案,请在注释中建议对答案进行更改。通过编辑更改他人的代码被认为是不好的形式。拼写错误以及不良的格式和语法是公平的游戏。
–锡人
2011年6月30日23:50
代替addSubview:UILabel,您应该只在viewForHeaderInSection中返回UILabel。 UILable是-一个UIView已经:)
– Nas Banov
2011-10-20 8:35
#4 楼
如果您想要带有自定义颜色的标题,则可以执行以下操作:[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
此解决方案自iOS 6.0起非常有效。
评论
嗯...对我不起作用。尝试使用iOS 6模拟器和iOS 7设备。您是否以此方式测试过?我应该放在哪里?
– Maxim Kholyavkin
2014年1月3日15:23
可以在application:didFinishLaunchingWithOptions:应用程序委托方法中完成。
– Leszek Zarna
14年1月3日,17:52
我的错:我试图在UITableViewStyleGrouped BTW时使用这种方式:应该使用这种方式更改文本颜色stackoverflow.com/a/20778406/751932
– Maxim Kholyavkin
2014年1月4日,0:13
如果在自定义UIView中,则将其放在-init方法中。
– felixwcf
16 Mar 23 '16 at 6:43
#5 楼
以下解决方案适用于带有iOS 8+的Swift 1.2override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
// This changes the header background
view.tintColor = UIColor.blueColor()
// Gets the header view as a UITableViewHeaderFooterView and changes the text colour
var headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
headerView.textLabel.textColor = UIColor.redColor()
}
#6 楼
不建议在UITableViewHeaderFooterView上设置背景色。请改用contentView.backgroundColor
。#7 楼
别忘了从委托中添加这段代码,否则在某些情况下,相对于视图/标签的高度,视图将被切除或出现在桌子后面。- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 30;
}
评论
如果您遵循iOS6及以后Dj S的回答,则不再需要此操作。
–金斯
2014年2月26日在8:20
#8 楼
您可以在main.storyboard上执行此操作大约2秒钟。选择表视图
转到“属性”检查器
列表项
向下滚动到“视图”副标题
更改“背景”
#9 楼
如果您不想创建自定义视图,还可以更改颜色(需要iOS 6),如下所示:-(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) {
UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view;
UIView* content = castView.contentView;
UIColor* color = [UIColor colorWithWhite:0.85 alpha:1.]; // substitute your color here
content.backgroundColor = color;
}
}
#10 楼
设置部分区域的背景和文本颜色:(感谢William Jockusch
和Dj S
)- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
if ([view isKindOfClass: [UITableViewHeaderFooterView class]]) {
UITableViewHeaderFooterView* castView = (UITableViewHeaderFooterView*) view;
castView.contentView.backgroundColor = [UIColor grayColor];
[castView.textLabel setTextColor:[UIColor grayColor]];
}
}
#11 楼
Swift 4要更改UITableView节的Header View的背景颜色,文本标签颜色和字体,只需为表视图覆盖
willDisplayHeaderView
,如下所示:override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let header = view as! UITableViewHeaderFooterView
header.backgroundView?.backgroundColor = .white
header.textLabel?.textColor = .black
header.textLabel?.font = UIFont(name: "Helvetica-Bold", size: 14)
}
这对我来说非常有效;希望对您有帮助!
评论
不建议在UITableViewHeaderFooterView上设置背景色。您必须将具有所需背景颜色的自定义UIView设置为backgroundView属性。
– mojtaba al Moussawi
19年1月1日于13:40
#12 楼
在标题视图中添加图像的方法如下:- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
UIImageView *headerImage = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top-gery-bar.png"]] autorelease];
headerImage.frame = CGRectMake(0, 0, tableView.bounds.size.width, 30);
[headerView addSubview:headerImage];
return headerView;
}
#13 楼
对于iOS8(测试版)和Swift,请选择所需的RGB颜色,然后尝试以下操作:override func tableView(tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView! {
var header :UITableViewHeaderFooterView = UITableViewHeaderFooterView()
header.contentView.backgroundColor = UIColor(red: 254.0/255.0, green: 190.0/255.0, blue: 127.0/255.0, alpha: 1)
return header
}
(“ override”在那里因为我在项目中使用的是UITableViewController而不是普通的UIViewController,但是更改节标题的颜色不是强制性的。
标题文本仍将可见。 >请注意,您需要调整节标题的高度。
祝你好运。
#14 楼
对于快速5 +在
willDisplayHeaderView
方法中func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
//For Header Background Color
view.tintColor = .black
// For Header Text Color
let header = view as! UITableViewHeaderFooterView
header.textLabel?.textColor = .white
}
希望对您有所帮助:]
评论
让header = view as! UITableViewHeaderFooterView
– BhushanVU
20'八月20'13:42
编辑。谢谢!
– Sree Ramana
20年8月21日在14:03
#15 楼
SWIFT 2我能够通过添加模糊效果成功地更改节的背景颜色(这确实很酷)。要轻松更改节的背景颜色,请执行以下操作:
首先转到情节提要并选择表视图
转到“属性”检查器
列表项
向下滚动要查看
更改“背景”
然后获得模糊效果,请添加到代码:
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
// This is the blur effect
let blurEffect = UIBlurEffect(style: .Light)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
// Gets the header view as a UITableViewHeaderFooterView and changes the text colour and adds above blur effect
let headerView: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
headerView.textLabel!.textColor = UIColor.darkGrayColor()
headerView.textLabel!.font = UIFont(name: "HelveticaNeue-Light", size: 13)
headerView.tintColor = .groupTableViewBackgroundColor()
headerView.backgroundView = blurEffectView
}
#16 楼
我知道它的回答,以防万一,在Swift中,请使用以下 override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let tableViewWidth = self.tableView.bounds
let headerView = UIView(frame: CGRectMake(0, 0, tableViewWidth.size.width, self.tableView.sectionHeaderHeight))
headerView.backgroundColor = UIColor.greenColor()
return headerView
}
#17 楼
iOS 8+func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
tableView.tableHeaderView?.backgroundColor = UIColor.blue()
}
#18 楼
基于@Dj S答案,使用Swift3。这在iOS 10上效果很好。func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
// Background color
view.tintColor = UIColor.black
// Text Color
let headerView = view as! UITableViewHeaderFooterView
headerView.textLabel?.textColor = UIColor.white
}
#19 楼
Swift 4非常简单。只需将其添加到您的班级并根据需要设置颜色即可。override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.backgroundColor = UIColor(red: 0.094, green: 0.239, blue: 0.424, alpha: 1.0)
}
,或者如果是简单的颜色
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.backgroundColor = UIColor.white
}
已更新为Swift 5
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = UIColor(red: 0.094, green: 0.239, blue: 0.424, alpha: 1.0)
}
,或者如果是简单的颜色
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
view.tintColor = UIColor.white
}
评论
在iOS 13中,将“ view.backgroundColor”替换为“ view.tintColor”。
– Bogdan Razvan
19年11月19日在7:53
#20 楼
我在iOS 7.x中有一个使用静态表格视图单元格的项目。 willDisplayHeaderView不会触发。但是,此方法可以正常运行:- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
NSLog(@"%s", __FUNCTION__);
CGRect headerFrame = CGRectMake(x, y, w, h);
UIView *headerView = [[UIView alloc] initWithFrame:headerFrame];
headerView.backgroundColor = [UIColor blackColor];
#21 楼
-(void) tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
{
if ([view isKindOfClass: [UITableViewHeaderFooterView class]])
{
UITableViewHeaderFooterView *castView = (UITableViewHeaderFooterView *) view;
UIView *content = castView.contentView;
UIColor *color = [UIColor whiteColor]; // substitute your color here
content.backgroundColor = color;
[castView.textLabel setTextColor:[UIColor blackColor]];
}
}
#22 楼
我认为这段代码还不错。 func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier(MyHeaderView.reuseIdentifier) as MyHeaderView
let backgroundView = UIView()
backgroundView.backgroundColor = UIColor.whiteColor()
headerView.backgroundView = backgroundView
headerView.textLabel.text = "hello"
return headerView
}
#23 楼
在iOS 7.0.4中,我使用自己的XIB创建了一个自定义标头。在此之前没有提到任何有效的方法。它必须是UITableViewHeaderFooterView的子类才能与dequeueReusableHeaderFooterViewWithIdentifier:
一起使用,并且看来该类在背景颜色方面非常顽固。所以最后我添加了一个名称为customBackgroudView的UIView(可以使用代码或IB来完成),然后设置它的backgroundColor属性。在layoutSubviews中:我将该视图的框架设置为边界。它可与iOS 7配合使用,不会出现故障。// in MyTableHeaderView.xib drop an UIView at top of the first child of the owner
// first child becomes contentView
// in MyTableHeaderView.h
@property (nonatomic, weak) IBOutlet UIView * customBackgroundView;
// in MyTableHeaderView.m
-(void)layoutSubviews;
{
[super layoutSubviews];
self.customBackgroundView.frame = self.bounds;
}
// if you don't have XIB / use IB, put in the initializer:
-(id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
...
UIView * customBackgroundView = [[UIView alloc] init];
[self.contentView addSubview:customBackgroundView];
_customBackgroundView = customBackgroundView;
...
}
// in MyTableViewController.m
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
MyTableHeaderView * header = [self.tableView
dequeueReusableHeaderFooterViewWithIdentifier:@"MyTableHeaderView"];
header.customBackgroundView.backgroundColor = [UIColor redColor];
return header;
}
#24 楼
只需更改标题视图的图层颜色- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease]; headerView.layer.backgroundColor = [UIColor clearColor].CGColor }
#25 楼
如果有人需要快速处理,请保留标题:override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0,y: 0,width: self.tableView.frame.width, height: 30))
view.backgroundColor = UIColor.redColor()
let label = UILabel(frame: CGRect(x: 15,y: 5,width: 200,height: 25))
label.text = self.tableView(tableView, titleForHeaderInSection: section)
view.addSubview(label)
return view
}
#26 楼
我通过控制台日志从Xcode收到消息。[TableView]在UITableViewHeaderFooterView上设置背景颜色已被弃用。请改为将具有所需背景颜色的自定义UIView设置为backgroundView
属性。
然后我只创建一个新的UIView并将其放置为HeaderView的背景。
不是一个好的解决方案,但是就像Xcode所说的那样容易。
#27 楼
就我而言,它的工作方式如下:let headerIdentifier = "HeaderIdentifier"
let header = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: headerIdentifier)
header.contentView.backgroundColor = UIColor.white
#28 楼
只需设置背景视图的背景颜色即可:func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
let tableHeader = view as! UITableViewHeaderFooterView
tableHeader.backgroundView?.backgroundColor = UIColor.white
}
#29 楼
使用RubyMotion / RedPotion,将其粘贴到您的TableScreen中: def tableView(_, willDisplayHeaderView: view, forSection: section)
view.textLabel.textColor = rmq.color.your_text_color
view.contentView.backgroundColor = rmq.color.your_background_color
end
像魅力一样工作!
#30 楼
尽管func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
也可以正常工作,但您可以在不实现其他委托方法的情况下实现此目的。在
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
方法中,可以使用view.contentView.backgroundColor = UIColor.white
代替无效的view.backgroundView?.backgroundColor = UIColor.white
。 (我知道backgroundView
是可选的,但是即使它存在,如果不实现willDisplayHeaderView
,这也无法唤醒
评论
我非常感谢编辑RE较新的iOS版本。