programing

UITableView 섹션 헤더의 글꼴 크기를 변경합니다.

telecom 2023. 4. 25. 21:51
반응형

UITableView 섹션 헤더의 글꼴 크기를 변경합니다.

UITableView 섹션 헤더의 텍스트 글꼴 크기를 가장 쉽게 변경할 수 있는 방법을 알려주실 수 있나요?

다음 방법을 사용하여 섹션 제목을 구현했습니다.

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

그런 다음 다음 다음 방법을 사용하여 섹션 헤더 높이를 성공적으로 변경하는 방법을 이해했습니다.

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

다음 방법을 사용하여 UITableView 셀을 채웁니다.

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

그러나 섹션 헤더 텍스트의 글꼴 크기(또는 글꼴 스타일)를 실제로 늘리는 방법에 대해 고민하고 있습니다.

누가 좀 도와주실래요?감사해요.

또 하나의 은 '보다 낫다'에 반응하는 것입니다.UITableViewDelegate메서드 법입니다.willDisplayHeaderView. 패스된 뷰는 실제로 .의 인스턴스입니다UITableViewHeaderFooterView요.

아래 예제에서는 글꼴을 변경하고 제목 텍스트를 셀 내에서 세로 및 가로로 가운데에 배치합니다.여러분도 역시 '보다 낫다'에 응답해야 한다는 점에 유의하세요.heightForHeaderInSection, 여기서 헤더 높이를 변경하기로 결정한 경우입니다.willDisplayHeaderView을 사용하세요.)

그런 다음 '보다 낫다'에 응답할 수 있습니다.titleForHeaderInSection다른 섹션 제목으로 구성된 헤더를 재사용하는 방법입니다.

목표-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입니다.

또한 이 코드는 헤더 보기가 UITableView가 아닌 경우 앱이 충돌하지 않도록 합니다.HeaderFooterView:

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
}

그러나 이 기능을 재정의해야 할 수도 있습니다.

목표-C:

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

Swift에서 다음을 수행합니다.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

다음과 같이 시도해 보십시오.

목표-C:

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

Swift에서 다음을 수행합니다.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let myLabel = UILabel()
    myLabel.frame = CGRect(x: 20, y: 8, width: 320, height: 20)
    myLabel.font = UIFont.boldSystemFont(ofSize: 18)
    myLabel.text = self.tableView(tableView, titleForHeaderInSection: section)

    let headerView = UIView()
    headerView.addSubview(myLabel)

    return headerView
}

의 답은 정답이지만, 이 방법을 사용할 때는 주의해야 합니다. mosca1337 답 、 그 、 그 、 그 、 그 、 그 、 그 、 그 、 。텍스트가 한 줄보다 긴 헤더의 높이를 계산해야 합니다.tableView:heightForHeaderInSection:네, 그렇습니다.

가장 선호하는 방법은 모양 API를 사용하는 것입니다.

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

이렇게 하면 글꼴이 변경되지만 높이 자체를 관리하기 위해 테이블에서 나옵니다.

최적의 결과를 얻으려면 테이블 보기를 하위 한 다음 격납 체인에 추가합니다(내부).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 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          
    }
}

Swift 3: 입니다.

크기만 조정하는 가장 간단한 방법은 다음과 같습니다.

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. 기본 섹션 헤더를 전체 사용자 지정 가능한 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. 기본 헤더를 변경합니다(기본값 유지).

구현 will표시합니다.HeaderView는 다음과 같습니다.

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

여기 있습니다, 여기에 몇 가지 방법을 적으셔야 합니다.#스위프트 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
}

행운을 빌어요

이 방법을 사용하여 글꼴 크기, 글꼴 스타일 및 머리글 배경도 설정할 수 있습니다.여기에는 두 가지 방법이 있습니다.

첫 번째 방법

- (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 4 버전의 Leo Natan 답변은 다음과 같습니다.

UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = UIFont.boldSystemFont(ofSize: 28)

사용자 지정 글꼴을 설정하려는 경우 사용할 수 있습니다.

if let font = UIFont(name: "font-name", size: 12) {
    UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).font = font
}

Swift 2: 입니다.

OP가 요청한 대로 크기만 조정하고 굵게 표시된 글꼴로 설정하지 마십시오.

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

»는 다음과 같습니다.textView재산에 관한 것입니다.UITableViewHeaderFooterView이겁니다.문서에 따르면 글꼴 크기를 변경하는 올바른 방법은 다음과 같습니다.UIListContentConfiguration요.

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let view = view as? UITableViewHeaderFooterView else { fatalError() }
    var contentConfiguration = view.defaultContentConfiguration()
    contentConfiguration.textProperties.font = UIFont.systemFont(ofSize: 30)
    view.contentConfiguration = contentConfiguration
}

여기서 제목을 설정할 때 주의해 주세요.titleForHeaderInSection이겁니다.제목은 '보다 낫다'로 정해야 합니다.contentConfiguration.text = "<Your Title>"요.

인정하건대, 저는 이것이 다소 융통성이 없다는 것을 알게 되었고 결국 제 자신의 단순하고 머리글 뷰를 돌려보냈습니다.viewForHeaderInSection요.

이것이 swift 5에 대한 저의 해결책입니다.

헤더 섹션 보기를 완전히 제어하려면 이전 게시물에서 보듯이 컨트롤러에서 tableView(:viewForHeaderInsection::) 메서드를 사용해야 합니다.그러나 성능을 개선하기 위해 매번 새로운 뷰를 생성하지 말고 테이블 셀을 재사용하는 것처럼 헤더 뷰를 재사용할 것을 권장합니다.이것은 tableView.dequeueReusable 메서드에 의한 것입니다.HeaderFooterView(ID: )입니다.하지만 문제는 이 재사용 기능을 사용하기 시작하면 글꼴이 예상대로 작동하지 않는다는 것입니다.색, 정렬 같은 다른 것들은 모두 괜찮지만 글꼴만 있습니다.몇 가지 논의가 있었지만, 저는 다음과 같이 작업을 했습니다.

문제는 tableView.dequeueReusable입니다.HeaderFooterView(withIdentifier:)는 항상 셀을 반환하는 tableView.dequeneReuseCell(:)과 다릅니다.전자는 아무도 없는 경우 0을 반환합니다.재사용 헤더 보기를 반환하더라도 원래 클래스 유형이 아니라 UITableHeaderFooterView입니다.그래서 당신은 당신의 코드에 따라 판단하고 행동해야 합니다.기본적으로 0인 경우 완전히 새로운 헤더 뷰를 가져옵니다.0이 아니면 제어할 수 있도록 강제로 캐스팅합니다.

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let reuse_header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "yourHeaderID")
        if (reuse_header == nil) {
            let new_sec_header = YourTableHeaderViewClass(reuseIdentifier:"yourHeaderID")
            new_section_header.label.text="yourHeaderString"
            //do whatever to set color. alignment, etc to the label view property
            //note: the label property here should be your custom label view. Not the build-in labelView. This way you have total control.
            return new_section_header
        }
        else {
            let new_section_header = reuse_section_header as! yourTableHeaderViewClass
            new_sec_header.label.text="yourHeaderString"
            //do whatever color, alignment, etc to the label property
            return new_sec_header}

    }

언급URL : https://stackoverflow.com/questions/19802336/changing-font-size-for-uitableview-section-headers 입니다.

반응형