更改UITableView节标题的字体大小

有人可以请教我最简单的方法来更改UITableView节头中的文本的字体大小?

我使用以下方法实现了部分标题:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

然后,我明白如何使用这种方法成功更改节头高度:

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

我有使用此方法填充的UITableView单元格:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

然而,我坚持如何实际增加节标题文本的字体大小或字体样式?

有人可以协助吗? 谢谢。

不幸的是,你可能不得不重写这个:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

尝试这样的事情:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UILabel *myLabel = [[UILabel alloc] init]; myLabel.frame = CGRectMake(20, 8, 320, 20); myLabel.font = [UIFont boldSystemFontOfSize:18]; myLabel.text = [self tableView:tableView titleForHeaderInSection:section]; UIView *headerView = [[UIView alloc] init]; [headerView addSubview:myLabel]; return headerView; } 

另一种方法是响应UITableViewDelegate方法willDisplayHeaderView 。 传递的视图实际上是UITableViewHeaderFooterView一个实例。

下面的例子改变了字体,并且在单元格中垂直和水平居中标题文本。 请注意,您还应该对heightForHeaderInSection做出响应,以便对表视图布局中的标题高度进行任何更改。 (也就是说,如果您决定更改此willDisplayHeaderView方法中的标题高度。)

然后,您可以对titleForHeaderInSection方法作出响应,以重复使用具有不同节标题的此configuration标题。

Objective-C的

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view; header.textLabel.textColor = [UIColor redColor]; header.textLabel.font = [UIFont boldSystemFontOfSize:18]; CGRect headerFrame = header.frame; header.textLabel.frame = headerFrame; header.textLabel.textAlignment = NSTextAlignmentCenter; } 

Swift 1.2

(注意:如果你的视图控制器是一个UITableViewController的后代,这需要声明为override func 。)

 override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { let header:UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView header.textLabel.textColor = UIColor.redColor() header.textLabel.font = UIFont.boldSystemFontOfSize(18) header.textLabel.frame = header.frame header.textLabel.textAlignment = NSTextAlignment.Center } 

Swift 3.0

这段代码还可以确保应用程序不会崩溃,如果您的标题视图不是UITableViewHeaderFooterView:

 override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { guard let header = view as? UITableViewHeaderFooterView else { return } header.textLabel?.textColor = UIColor.red header.textLabel?.font = UIFont.boldSystemFont(ofSize: 18) header.textLabel?.frame = header.frame header.textLabel?.textAlignment = .center } 

虽然mosca1337的答案是一个正确的解决scheme,小心这种方法。 对于文本长度超过一行的标题,您将必须执行tableView:heightForHeaderInSection:中的标题高度计算,这可能很麻烦。

更好的方法是使用外观API:

 [[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont boldSystemFontOfSize:28]]; 

这将改变字体,而仍然离开桌子来pipe理自己的高度。

为获得最佳效果,请将表视图子类化,并将其添加到包容链( appearanceWhenContainedIn: )以确保只更改特定表视图的字体。

对于iOS 7我使用这个,

 -(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view; header.textLabel.font = [UIFont boldSystemFontOfSize:10.0f]; header.textLabel.textColor = [UIColor orangeColor]; } 

这里是Swift版本的头部大小调整

 func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return CGFloat(27); } func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let header = view as? UITableViewHeaderFooterView { header.textLabel!.font = UIFont.systemFontOfSize(10.0) header.textLabel!.textColor = UIColor.orangeColor() } } 

Swift 3:

最简单的方法来resize:

 func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { let header = view as! UITableViewHeaderFooterView if let textlabel = header.textLabel { textlabel.font = textlabel.font.withSize(15) } } 

Swift 2.0

  1. 用完全可定制的UILabelreplace默认的节头。

实现viewForHeaderInSection,如下所示:

  override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let sectionTitle: String = self.tableView(tableView, titleForHeaderInSection: section)! if sectionTitle == "" { return nil } let title: UILabel = UILabel() title.text = sectionTitle title.textColor = UIColor(red: 0.0, green: 0.54, blue: 0.0, alpha: 0.8) title.backgroundColor = UIColor.clearColor() title.font = UIFont.boldSystemFontOfSize(15) return title } 
  1. 改变默认标题(保留默认)。

实现willDisplayHeaderView,如下所示:

  override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let view = view as? UITableViewHeaderFooterView { view.backgroundView?.backgroundColor = UIColor.blueColor() view.textLabel!.backgroundColor = UIColor.clearColor() view.textLabel!.textColor = UIColor.whiteColor() view.textLabel!.font = UIFont.boldSystemFontOfSize(15) } } 

请记住:如果您使用的是静态单元格,由于UITableView的顶部,第一个部分的标题会比其他部分的标题更高; 解决这个问题:

实现heightForHeaderInSection,如下所示:

  override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 30.0 // Or whatever height you want! } 

使用这种方法,您可以设置字体大小,字体样式和标题背景 。 这有2种方法

第一种方法

 - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{ UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view; header.backgroundView.backgroundColor = [UIColor darkGrayColor]; header.textLabel.font=[UIFont fontWithName:@"Open Sans-Regular" size:12]; [header.textLabel setTextColor:[UIColor whiteColor]]; } 

第二种方法

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 30)]; // myLabel.frame = CGRectMake(20, 8, 320, 20); myLabel.font = [UIFont fontWithName:@"Open Sans-Regular" size:12]; myLabel.text = [NSString stringWithFormat:@" %@",[self tableView:FilterSearchTable titleForHeaderInSection:section]]; myLabel.backgroundColor=[UIColor blueColor]; myLabel.textColor=[UIColor whiteColor]; UIView *headerView = [[UIView alloc] init]; [headerView addSubview:myLabel]; return headerView; } 

Swift 2:

正如OP问, resize,不要把它设置为一个系统粗体字体或任何:

 func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { if let headerView = view as? UITableViewHeaderFooterView, textLabel = headerView.textLabel { let newSize = CGFloat(16) let fontName = textLabel.font.fontName textLabel.font = UIFont(name: fontName, size: newSize) } }