UITableView의 섹션 사이 간격을 줄입니다.


141

UITableView의 두 섹션 사이의 간격을 줄이는 방법이 있습니까? 내가 가진 모든 단일 섹션 사이에 약 15 픽셀이 있습니다. 이미 0을 반환하려고 않았다 -tableView:heightForFooterInSection:-tableView:heightForHeaderInSection:하지만 아무것도 변경되지 않습니다.

어떤 제안?


1
내가 사용하던 그룹화 있는 tableView과의 머리글 / 바닥 글의 높이를 설정 0.0. 그러나 (기본) 30 포인트 높이의 회색 영역이 표시되었습니다. 사용 0.0이 허용되지 않습니다. 위의 값을 사용해야합니다 ( 0.0예 :) 0.0001.

@Honey가 말한 것처럼 0.0작동하지 않습니다. 나는 같은 문제에 대해 더 철저한 답변을
James Nelson

답변:


263

조금 까다로 웠지만이 코드를 사용해보십시오.

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

    return 1.0;
}

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

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

그에 따라 값을 변경하십시오. 공백을 제거하려면 0.0이 허용되지 않을 것이라고 생각합니다. 가장 작은 제정신 값은 1.0 인 것 같습니다.


2
이중 부동 충돌로 인해 5.0 대신 5.0f를 반환해야합니다.
LeonS

45
0.00001f를 높이로 반환 할 수 있으며 높이는 0 픽셀 / 포인트가됩니다.
Klaas

1
@Klass가 지적했듯이 0높이로 사용할 수 없습니다 . 기본 높이를 얻습니다.
zekel

26
왜 CGFLOAT_MIN을 사용하지 않습니까? 그것은 이런 종류의 시나리오를 위해 만들어졌습니다 :)
Andrei Filip

12
swift를 사용하면 다음으로 돌아갈 수 있습니다CGFloat.leastNonzeroMagnitude
oztune

140

거리를 0으로 줄이려면 다음을 사용해야합니다.

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

UITableViewDelegate를 제공하면 0보다 큰 수레에서 시작하는 효과 만 만들기 때문입니다.

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


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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(XCode 4.0.2와 함께 iOS 4.1 사용)


7
0.0001을 반환; 나를 위해 일하고 있습니다. 저는 xcode 4.6과 iOS 6.1을 사용하고 있습니다
Sam

처음 두 가지 방법으로 CGFLOAT_MIN 만 반환하면 정상적으로 작동합니다.
Julius

0 대신 사용return .leastNormalMagnitude
stan

33

실제로 크기 탭 아래의 인터페이스 빌더에서 바닥 글 / 헤더 / 셀 높이를 설정할 수 있습니다. 기본적으로 머리글 / 바닥 글은 10.0으로 설정되어 있습니다.


나는 그러한 행동이 iOS 5.0 또는 iOS 6.0에서 추가되었다고 생각하지만, 그룹 사이의 거리를 설정하는 것이 훨씬 쉽습니다.
Vlas Voloshin

2
나는 이것이 오래되었다는 것을 알고 있지만 XCode 5와 iOS 7 에서이 코드에서 수행 해야하는 것처럼 보입니다. 인터페이스 빌더에서 0으로 설정했고 코드에서 0으로 설정할 때까지 여전히 1로 설정되었습니다.
Ahmad

Xcode 6 및 iOS 8에서는 스토리 보드의 구성으로 만 작동하는 것 같습니다.
Murray Sagal

xcode 7에서는 기본적으로 18로 설정되어 있습니다. 그러나 그것은 가장 쉬운 해결책입니다!
static0886

27

섹션 머리글 / 바닥 글 높이를 줄여야합니다. 그러면 섹션 사이의 공간이 줄어 듭니다.

이 코드를 사용해보십시오

그것은 나를 위해 작동합니다 :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

스토리 보드에서 섹션 바닥 글 및 머리글의 높이를 줄일 수도 있습니다. tableview에서-> 크기 관리자. 섹션 높이로 이동하십시오.

스토리 보드의 UITableView 크기 관리자.

기본적으로 일반 스타일 테이블의 경우 22로, 그룹화 된 스타일 테이블의 경우 10으로 설정되어 있습니다. 머리글과 바닥 글의 값을 개별적으로 늘리거나 줄여 값을 구성 할 수 있습니다.


6

나에게 문제는 그룹 테이블 뷰 스타일 ( UITableViewStyleGrouped)을 사용했기 때문 입니다. 그것을 일반 스타일 ( UITableViewStylePlain)로 변경했을 때 내 tableView:heightForHeaderInSection:방법은 각 섹션 헤더의 크기를 결정하는 유일한 방법이었습니다.


4

이것을 사용하면 0이 예상대로 작동하지 않습니다.

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

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

iOS7 용 업데이트 : ARC 자동 릴리스 업데이트로 인해 @Martin Stolz 코드가 편집되었습니다.

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

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

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(iOS7, Xcode v5.0 사용)


0

나 에게이 문제는 다음 코드를 사용하여 해결되었습니다.

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

첫 번째 섹션에서 1 을 반환 하면 문제가 해결되었습니다.


0

머리글 / 바닥 글 공간을 변경하려면 다음 방법 구현 해야합니다 .

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

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

(바닥 글 높이를 변경하려면 해당 방법을 사용하십시오)

다음 코드는 섹션 주위의 공백을 완전히 제거합니다.

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

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

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.