147

UITableView セクション ヘッダーのテキストのフォント サイズを変更する最も簡単な方法を誰かに教えてもらえますか?

次の方法を使用してセクションのタイトルを実装しています。

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

次に、この方法を使用してセクション ヘッダーの高さを正常に変更する方法を理解しました。

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

このメソッドを使用して UITableView セルを作成しました:

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

しかし、セクションヘッダーテキストのフォントサイズを実際に大きくする方法、またはフォントスタイルを実際に大きくする方法については固執していますか?

誰か助けてくれませんか?ありがとう。

4

11 に答える 11

389

これを行う別の方法は、UITableViewDelegateメソッドに応答することwillDisplayHeaderViewです。渡されたビューは、実際には のインスタンスですUITableViewHeaderFooterView

次の例では、フォントを変更し、タイトル テキストをセル内で垂直方向および水平方向の中央に配置しています。heightForHeaderInSectionテーブル ビューのレイアウトで考慮されるヘッダーの高さの変更にも対応する必要があることに注意してください。(つまり、このwillDisplayHeaderViewメソッドでヘッダーの高さを変更することにした場合)。

次に、メソッドに応答して、titleForHeaderInSectionこの構成済みヘッダーを別のセクション タイトルで再利用できます。

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;
}

スイフト 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
}

スイフト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.bounds
    header.textLabel?.textAlignment = .center
}
于 2014-04-11T19:55:03.887 に答える
97

mosca1337の答えは正しい解決策ですが、その方法には注意してください。テキストが 1 行を超えるヘッダーの場合、ヘッダーの高さの計算を実行する必要があり、tableView:heightForHeaderInSection:面倒な場合があります。

非常に好ましい方法は、外観 API を使用することです。

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

これにより、フォントが変更されますが、高さ自体を管理するテーブルはそのままです。

最適な結果を得るには、テーブル ビューをサブクラス化し、それを包含チェーン ( appearanceWhenContainedIn:) に追加して、フォントが特定のテーブル ビューに対してのみ変更されるようにします。

于 2014-01-12T03:03:38.850 に答える
27

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 3.0バージョンです

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let header = view as? UITableViewHeaderFooterView {
        header.textLabel!.font = UIFont.systemFont(ofSize: 24.0)
        header.textLabel!.textColor = UIColor.orange          
    }
}
于 2014-09-29T20:00:02.080 に答える
8

スウィフト 2.0 :

  1. デフォルトのセクション ヘッダーを完全にカスタマイズ可能な UILabel に置き換えます。

次のように、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!
  }
于 2015-12-27T15:11:49.647 に答える
4

この方法では、フォント サイズ、フォント スタイル、およびヘッダーの背景も設定できます。これには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]];
    }

2番目の方法

- (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;
}
于 2016-12-15T10:56:11.583 に答える
4

ここにいくつかのメソッドを記述する必要があります。#スイフト5

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    
    let header = view as? UITableViewHeaderFooterView
    header?.textLabel?.font = UIFont.init(name: "Montserrat-Regular", size: 14)
    header?.textLabel?.textColor = .greyishBrown
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    
    return 26
}

頑張ってください

于 2020-09-09T17:37:07.563 に答える