IT

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

itgroup 2023. 8. 26. 10:43
반응형

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

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

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

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

및 다음 딜러를 사용하여 섹션 헤더/베이스 높이를 설정합니다.

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

테이블 머리글/발판 높이를 설정하는 것을 도와줄 수 있는 사람이 있습니까?

감사해요.

테이블의 프레임 속성을 설정하기만 하면 됩니다.머리글 보기.

멋진 해킹을 발견했습니다.프레임 속성 수정 후 아래 줄 추가

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

문제는 보기를 테이블에 할당할 때 UITableView가 높이(실제 프레임)를 캐싱한다는 것입니다.HeaderView 속성입니다.위의 선은 높이를 다시 할당할 뿐입니다.

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

그건 작동할 거야.

먼저 테이블 보기의 바닥글/머리글을 0으로 설정한 경우에만 작동합니다.

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;

그것을 확인하세요.바닥글은 바닥글 보기의 할당 취소를 방지하는 강력한 참조입니다.

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:_)그런 다음 바닥글 보기에 xib 파일을 사용하는 경우 xib에서 보기를 만들고 래퍼 보기에 하위 보기로 추가합니다.그런 다음 래퍼 할당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

딱 ! 는 컨스트럭터 ! 게요생를사바보여닥만것기다입니드는를글하용성자점.(frame:_)UIView()를 만들고 프레임 속성을 할당해도 작동하지 않을 수 있습니다.

IB에서 뷰를 테이블 헤더 뷰로 추가하는 경우, 탭 5(size inspector)에서 IB에서 해당 뷰의 프레임을 설정합니다.

으로 로그래로설경는우정하방식으를 설정하면,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 답변은 목표-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;
}

tableView의 main headerView에 XIB를 사용하는 경우 원하는 대로 높이를 설정하고 자동 크기 조정의 위쪽, 아래쪽 블록 및 위쪽, 아래쪽 화살표를 클릭 취소할 수 있습니다.수평 조각만 선택됩니다.Vertical은 위에서 언급한 대로 선택 해제됩니다.

원하는 높이로 UIView를 생성할 수 있으며(너비는 UITableView의 너비여야 함), 그 안에 적절한 치수의 그림과 함께 UIImageView를 배치할 수 있습니다. 자동으로 늘어나지 않습니다.

컨테이너 뷰의 높이를 높여 내부 UI 이미지 뷰 위와 아래에 여백을 줄 수도 있습니다.

또한 변환 변환을 할당하여 이미지를 컨테이너 헤더 보기의 중앙에 배치할 수 있습니다.

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

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

또는 헤더 높이가 서로 다른 경우 다음을 구현합니다.

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

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

Size Inspector header

tableView의 headerView 높이를 변경한 경우 headerView의 프레임을 재설정한 다음 headerView of tableView를 재설정합니다.

self.headerView.frame = newFrame;
self.tableView.tableHeaderView = self.headerView;
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
}

아니면 이렇게 사용할 수도 있습니다.

tableView.estimatedSectionHeaderHeight 

테이블 뷰 기본 속성 사용:

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

감사해요.

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

반응형