更改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 :
- 用完全可定制的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 }
- 改变默认标题(保留默认)。
实现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) } }