Programing

UITableView에서 테이블 헤더의 높이를 설정하는 방법은 무엇입니까?

lottogame 2020. 11. 7. 08:56
반응형

UITableView에서 테이블 헤더의 높이를 설정하는 방법은 무엇입니까?


UITableView 클래스 및 위임 참조에 대한 Apple 문서를 살펴 보았지만 테이블 헤더 높이를 명시 적으로 설정하는 방법을 찾을 수 없습니다.

다음 대리자를 사용하여 테이블 셀 높이를 설정합니다.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

다음 대리자를 사용하여 섹션 머리글 / 바닥 글 높이를 설정합니다.

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

누구든지 테이블 머리글 / 바닥 글 높이를 설정하도록 도와 주시겠습니까?

감사.


tableHeaderView의 프레임 속성을 설정하기 만하면됩니다.


좋은 해킹을 찾았습니다. 프레임 속성 수정 후 아래 줄 추가

self.tableView.tableHeaderView = self.tableView.tableHeaderView;

트릭은 tableHeaderView 속성에 뷰를 할당 할 때 UITableView가 높이 (실제로 프레임)를 캐싱한다는 것입니다. 위의 줄은 높이를 다시 할당합니다.


override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    sizeHeaderToFit()
}

private func sizeHeaderToFit() {
    let headerView = tableView.tableHeaderView!

    headerView.setNeedsLayout()
    headerView.layoutIfNeeded()

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
    var frame = headerView.frame
    frame.size.height = height
    headerView.frame = frame

    tableView.tableHeaderView = headerView
}

자세한 내용은 여기에서 확인할 수 있습니다 .


여전히 필요한 경우 속성을 설정하려고 했습니까?

self.tableView.tableHeaderView 

필요한 높이를 계산하고 다음에 대한 새보기를 설정하는 경우 tableHeaderView:

CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = newHeight;

self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:frame];

작동합니다.


먼저 tableview의 바닥 글 / 머리글을 nil로 설정 한 경우에만 나와 함께 작동합니다.

self.footer = self.searchTableView.tableFooterView;
CGRect frame = self.footer.frame;
frame.size.height = 200;
self.footer.frame = frame;
self.searchTableView.tableFooterView = nil;
self.searchTableView.tableFooterView = self.footer;

self.footer가 바닥 글보기가 할당 해제되는 것을 방지하기 위해 강력한 참조인지 확인합니다.


Swift 4-HEIGHT_VIEW로 높이를 관리 할 수 ​​있습니다.이 대구 만 추가하면 작동합니다.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let HEIGHT_VIEW = 60
    tableView.tableFooterView?.frame.size = CGSize(width: tblView.frame.width, height: CGFloat(HEIGHT_VIEW))

    tableView.tableHeaderView?.frame.size = CGSize(width:tblView.frame.width, height: CGFloat(HEIGHT_VIEW))
}

생성자 UIView(frame:_)사용하여 Footer Wrapper View를 만든 다음 FooterView에 xib 파일을 사용하는 경우 xib에서 뷰를 생성하고 래퍼 뷰에 subView로 추가하십시오. 그런 다음 래퍼를 tableView.tableFooterView = fixWrapper.

    let fixWrapper = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 54)) // dont remove
    let footer = UIView.viewFromNib("YourViewXibFileName") as! YourViewClassName
    fixWrapper.addSubview(footer)
    tableView.tableFooterView = fixWrapper
    tableFootterCostView = footer

그것은 나를 위해 완벽하게 작동합니다! 요점은 constructor로 바닥 글 뷰를 만드는 것 (frame:_)입니다. UIView ()를 생성하고 프레임 속성을 할당하더라도 작동하지 않을 수 있습니다.


IB에서 테이블 헤더보기로보기를 추가하는 경우 Tab 5 (크기 검사기)의 IB에서 해당보기의 프레임을 설정합니다.


tableView의 main headerView에 XIB를 사용하는 경우 XIB를 freeform으로 설정하여 원하는대로 Height를 설정하고 Autoresizing의 상단, 하단 블록 및 상단, 하단 화살표를 클릭 해제 할 수 있습니다. 수평 부분 만 선택됩니다. .


원하는 높이로 UIView를 만들 수 있으며 (너비는 UITableView의 너비 여야 함) 내부에 적절한 크기의 그림이있는 UIImageView를 배치 할 수 있습니다. 자동으로 늘어나지 않습니다.

컨테이너보기에 더 높은 높이를 지정하여 내부 UIImageView 위와 아래에 여백을 제공 할 수도 있습니다.

또한 예를 들어 이미지를 컨테이너 헤더보기의 중간에 배치하기 위해 Translation 변환을 할당 할 수 있습니다.


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

또는 이와 같이 사용할 수도 있습니다

tableView.estimatedSectionHeaderHeight 

Xcode 10에서는 "Size Inspector"탭에서 섹션 높이의 머리글과 바닥 글을 설정할 수 있습니다.

크기 검사기 헤더


당신은 프로그래밍 방식으로 설정하면 tableHeaderView, 다음 단지 내부로 설정 viewDidLayoutSubviews.

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        setupTableViewHeader()
    }

    private func setupTableViewHeader() {
        // Something you do to set it up programatically...
        tableView.tableHeaderView = MyHeaderView.instanceFromNib() 
    }

프로그래밍 방식으로 설정하지 않은 경우이 링크를 기반으로 @Kris가 답변 한 것과 유사하게 수행해야합니다.

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        sizeHeaderToFit()
    }

    private func sizeHeaderToFit() {
        if let headerView = tableView.tableHeaderView {
            headerView.setNeedsLayout()
            headerView.layoutIfNeeded()

            let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
            var frame = headerView.frame
            frame.size.height = height
            headerView.frame = frame

            tableView.tableHeaderView = headerView
        }
    }


@kris 대답은 Objective-C에서 원하는 사람에게 도움이됩니다.

다음은 코드입니다.

-(void)viewDidLayoutSubviews{
     [super viewDidLayoutSubviews];
     [self sizeHeaderToFit];
}

-(void)sizeHeaderToFit{
     UIView *headerView = self.tableView.tableHeaderView;
     [headerView setNeedsLayout];
     [headerView layoutIfNeeded];
     CGFloat height = [headerView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
     CGRect frame = headerView.frame;
     frame.size.height = height;
     headerView.frame = frame;
     self.tableView.tableHeaderView = headerView;
}

테이블보기 기본 속성 사용 :

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 35.0;
}

감사


tableView의 headerView 높이를 변경 한 경우 다음 코드를 사용하여 tableView를 업데이트하십시오.

Objc :

[tableView beginUpdates];
tableView.endUpdates()

빠른:

tableView.beginUpdates()
tableView.endUpdates()

자동 레이아웃을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = <your-header-height>

또는 헤더의 높이가 다른 경우 계속해서 구현하십시오.

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return <your-header-height>
}

참고 URL : https://stackoverflow.com/questions/5581116/how-to-set-the-height-of-table-header-in-uitableview

반응형