그룹화 된 UITableView 헤더의 높이를 변경하는 방법은 무엇입니까?


88

테이블보기에서 섹션 머리글의 높이를 변경하는 방법을 알고 있습니다. 그러나 첫 번째 섹션 전에 기본 간격을 변경하는 해결책을 찾을 수 없습니다.

지금이 코드가 있습니다.

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    if (section == 0){
        return 0;
    }
    return 10;
}

여기에 이미지 설명 입력


1
stackoverflow.com/questions/5441938/… 이 링크를 참조하십시오 ...
Jitendra

올바른 방향으로 날 안내 @JitendraDeore 감사합니다
circuitlego

답변:


219

CGFLOAT_MIN원하는 섹션 높이로 0 대신 반환 하십시오.

0을 반환하면 UITableView가 기본값을 사용합니다. 이것은 문서화되지 않은 동작입니다. 아주 작은 숫자를 반환하면 높이가 0 인 헤더를 효과적으로 얻을 수 있습니다.

스위프트 3 :

 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return CGFloat.leastNormalMagnitude
        }
        return tableView.sectionHeaderHeight
    }

빠른:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return CGFloat.min
    }
    return tableView.sectionHeaderHeight
}

Obj-C :

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return CGFLOAT_MIN;
    return tableView.sectionHeaderHeight;
}

8
Swift에서는 'CGFLOAT_MIN'을 사용할 수 없습니다. 대신 CGFloat.min을 사용하십시오.
tounaobun

4
CGFloat.min이 -0.0000000000001과 같은 음수 값을 반환하기 때문에 CGFloat.min이 충돌을 일으켰습니다.
Pavel Gatilov

2
아마도 이것은 pedantry이지만 CGFloat.min은 아주 작은 숫자가 아니라 매우 큰 음수입니다. 아주 적은 수를 원하면 엡실론을 사용합니다.
alex bird

6
Swift 3에서는CGFloat.leastNormalMagnitude
ixany 2011

1
조언 :에서이 값을 사용하지 마십시오 estimatedHeightForHeaderInSection. 앱이 충돌합니다.
페드로 파울로 아모 림

27

당신이 사용하는 경우 tableView스타일 그룹화 , tableView자동으로 설정 상단과 하단 세트를. 이를 방지하고 내부 삽입 설정을 방지하려면 머리글 및 바닥 글에 대리자 메서드를 사용하십시오. 0.0을 반환하지 않고CGFLOAT_MIN .

목표 -C

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // Removes extra padding in Grouped style
    return CGFLOAT_MIN;
}

빠른

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    // Removes extra padding in Grouped style
    return CGFloat.leastNormalMagnitude
}

나는 추가했다 전무를 반환 하기위한 viewForHeaderInSection완전히 사라질 때까지 헤더.
Dominik Seemayr

19

높이가 0 인 테이블 머리글보기를 설정할 수없는 것 같습니다. 결국 다음을 수행했습니다.

- (void)viewWillAppear:(BOOL)animated{
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 1;
    UIView *headerView = [[UIView alloc] initWithFrame:frame];
    [self.tableView setTableHeaderView:headerView];
}

:이 더 나은 세트 높이 여기에있을 것입니다- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 1.0f; }
uniruddh

19

이것은 Swift 4 에서 저에게 효과적 이었습니다. UITableView예를 들어 수정하십시오 viewDidLoad:

// Remove space between sections.
tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

// Remove space at top and bottom of tableView.
tableView.tableHeaderView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))
tableView.tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: CGFloat.leastNormalMagnitude)))

1
Lifesaver, 시간을내어 여기에 언급 해 주셔서 감사합니다. :)
user2672052

13

이것을 시도 할 수 있습니다.

에서 loadView

_tableView.sectionHeaderHeight = 0;

그때

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

헤더에 개체가없는 한 제거해야합니다.

섹션 헤더의 크기를 원하는 경우 반환 값만 변경하십시오.

sectionfooter가 제거되지 않은 경우에도 동일합니다.

_tableView.sectionFooterHeight = 0;

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 0;
}

글쎄, 이것은 iOS7의 tableview에 대한 내 문제에 대해 작동합니다.


3

self.tableView.tableHeaderView = [UIView new];추가 한 후 코드를 제거해야 합니다.

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return CGFLOAT_MIN;
}

그것은이다 footer내 경우에는 문제를 일으키는 높이입니다. 도움에 감사드립니다.
pkc456

2

viewForHeaderInSection높이에 관계없이 뷰를 사용 하고 반환 할 수 있습니다 .

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

    int height = 30 //you can change the height 
    if(section==0)
    {
       UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)];

       return view;
    }
}

섹션 헤더에 대해 묻는 것이 아니라 테이블 헤더에 대해 묻습니다.
circuitlego 2013

그런 다음 A uiview를 테이블 헤더 뷰에 직접 전달할 수 있습니다.
Divyam shukla 2013

2

신속한 2.0

func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {

        return yourHeight
    }

2

Swift 4에서

그룹화 된 테이블보기에서 추가 상단 패딩을 제거합니다.

여기서 높이는 0을 지정하면 tableview가 기본 상단 여백을 사용하므로 0을 제공 할 수 없기 때문에 섹션 헤더의 최소 높이로 1이 제공됩니다.

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

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

0

viewForHeaderInSection의 예 :

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 118)];
view.backgroundColor = COLOR_DEFAULT;

NSString* key = [self.tableKeys objectAtIndex:section];
NSArray *result = (NSArray*)[self.filteredTableData objectForKey:key];
SZTicketsResult *ticketResult = [result objectAtIndex:0];

UIView *smallColoredView = [[UIView alloc] initWithFrame:CGRectMake(0, 5, 320, 3)];
smallColoredView.backgroundColor = COLOR_DEFAULT_KOSTKY;
[view addSubview:smallColoredView];

UIView *topBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 8, 320, 40)];
topBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:topBackgroundView];

UILabel *totalWinnings = [[UILabel alloc] initWithFrame:CGRectMake(10, 8, 300, 40)];
totalWinnings.text = ticketResult.message;
totalWinnings.minimumFontSize = 10.0f;
totalWinnings.numberOfLines = 0;
totalWinnings.backgroundColor = [UIColor clearColor];
totalWinnings.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:totalWinnings];

UIView *bottomBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 320, 58)];
bottomBackgroundView.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:248.0/255.0 blue:174.0/255.0 alpha:1];
[view addSubview:bottomBackgroundView];

UILabel *numberOfDraw = [[UILabel alloc] initWithFrame:CGRectMake(10, 55, 290, 58)];
numberOfDraw.text = [NSString stringWithFormat:@"sometext %@",[ticketResult.title lowercaseString]];;
numberOfDraw.minimumFontSize = 10.0f;
numberOfDraw.numberOfLines = 0;
numberOfDraw.backgroundColor = [UIColor clearColor];
numberOfDraw.font = [UIFont boldSystemFontOfSize:15.0f];
[view addSubview:numberOfDraw];

return view;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.