UITableView 아래에서 추가 구분 기호 제거


714

4 행으로 테이블 뷰를 설정할 때 채워진 행 아래에 여분의 구분선 (또는 여분의 빈 셀)이 여전히 있습니다.

이 세포들을 어떻게 제거합니까?

UITableView의 추가 구분선 이미지

답변:


1505

인터페이스 빌더 (iOS 9+)

UIView를 테이블로 드래그하십시오. 스토리 보드에서는 사용자 지정 셀 아래 맨 위에 배치됩니다. 이름을 "footer"로 지정할 수 있습니다.

여기에는 명확성을 위해 녹색으로 표시되어 있으며 명확한 색상을 원할 것입니다.

높이를 조정하면 원하는대로 테이블의 "바운스 바운스"처리 방법에 영향을 줄 수 있습니다. (높이 0은 일반적으로 좋습니다).

여기에 이미지 설명을 입력하십시오


프로그래밍 방식으로 수행하려면

빠른

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

목표 -C

iOS 6.1 이상

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}

또는 원하는 경우

    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

역사적으로 iOS에서 :

테이블 뷰 컨트롤러에 추가 ...

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // This will create a "invisible" footer
     return CGFLOAT_MIN;
 }

그리고 필요하다면 ...

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{        
    return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}

귀하의 설명과 코드가 반대라고 생각합니다. 어쨌든, 이것은 나를 위해 훌륭하게 작동했습니다. 그룹화 된 테이블에는 "실제"바닥 글 만 사용하므로 코드 주위에 if (tableView.style! = UITableViewStyleGrouped) {}를 추가했습니다. 이제 그룹화되지 않은 모든 테이블은 추가 셀을 잃는 반면 그룹화 된 테이블은 영향을받지 않습니다.
— arlomedia

위의 메모에 따라 viewForFooterInSection 메서드에 조건을 넣으면 메서드가 UIView 또는 nil을 반환하는지 확인하는 경고를 추가합니다. 실수로 void를 반환하면 앱이 다운됩니다!
— arlomedia

4
@Mathieu 이것은 테이블에 사용자 정의 바닥 글이 있으면 테이블 뷰를 채우기 위해 "팬텀"행을 만들지 않기 때문에 작동합니다. 따라서 바닥 글로 사용할 빈보기를 만들고 높이를 0에 가깝게 설정하십시오 (0이 될 수 없거나 iOS가 렌더링하지 않음). 이 간단한 트릭으로 기본 동작을 변경합니다.
— J. Costa

2
@ j.Costa : uitableview가 생성되는 동안 솔루션은 한 번만 작동합니다. 마지막 셀을 클릭하면 솔루션이 더 좋지 않습니다. 답을 향상 시키십시오.

3
사용 tableFooterView테이블이 여전히 세포에 콘텐츠 예상대로, 잎을 행의 마지막 셀 세퍼레이터. 역사적인 방법을 사용하면 마지막 구분 기호가 제거되고 전체적으로 더 좋아 보입니다.
— James Kuang

128

다음은 그룹화 된 테이블 스타일을 사용하여 다른 방법으로 수행 할 수있는 방법입니다. 표에 머리글과 바닥 글을 추가 하면 (아마도 하나 또는 다른 것으로 충분하지 않은 경우) , 구분 기호가 필러 / 빈 행에서 사라집니다.

나는 고기가 많은 손가락으로 테이블 셀 대신 버튼을 칠 위험을 줄이기 위해 테이블의 상단과 하단에 약간의 공간을 원했기 때문에 이것에 걸려 넘어졌습니다. 빈보기를 머리글 및 바닥 글로 고정하는 방법은 다음과 같습니다. 원하는 높이를 사용하면 추가 구분선이 여전히 제거됩니다.

- (void) addHeaderAndFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.myTableView setTableHeaderView:v];
    [self.myTableView setTableFooterView:v];
    [v release];
}

@Casebash에 대한 응답으로, 내 앱 코드 (iTunes 스토어의 "AcmeLists"목록 관리자 ...)로 돌아가 addHeaderAndFooter 메서드를 단락 시켜서 확인했습니다. 그것 없이는 여분의 행 구분 기호가 있습니다. 코드를 사용하면이 창 스냅에서 볼 수있는 것이 있습니다 : no table row separators picture . 그래서 왜 그것이 당신을 위해 일하지 않았는지 잘 모르겠습니다. 또한 테이블 뷰에 사용자 정의 바닥 글을 설정하면 그 아래에 빈 행에 대한 행 구분 기호 그리기를 중지해야합니다. 그것은 끔찍할 것입니다. 참고로 화면에서 볼 수있는 것보다 많은 행이있는 테이블을보고 두 개의 행이있는 테이블을 살펴 보았습니다. 두 경우 모두 외부 분리기가 없습니다.

사용자 정의보기가 실제로 추가되지 않았을 수 있습니다. 이를 확인하려면 배경색을 clearColor, 이외의 다른 색으로 설정하십시오 [UIColor redColor]. 표 하단에 빨간색 막대가 보이지 않으면 바닥 글이 설정되지 않은 것입니다.


1
IB에서도이 작업을 수행 할 수 있습니다. 그냥 1로 높이를있는 TableView의 하단에있는 UIView를 끌어 설정
— Ortwin Gentz에게

70

Swift의 UITableView에서 빈 행에 대한 추가 구분선 제거

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTableview.tableFooterView = UIView()
}

34

wkw 답변 을 연장하고 싶습니다 :

높이가 0 인 바닥 글 만 추가하면 트릭이 수행됩니다. (sdk 4.2, 4.4.1에서 테스트)

- (void) addFooter
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];

    [self.myTableView setTableFooterView:v];
}

또는 더 간단합니다-tableview를 설정하는 경우 다음 줄을 추가하십시오.

//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];

또는 더 간단하게-구분 기호를 간단히 제거하십시오.

[_tableView setTableFooterView:[UIView new]];

다시 wkw 감사 합니다 :)


이것은 정답입니다. 다른 방법의 coz는 마지막 행이 줄 구분 기호없이 남아 있습니다
— Ankush

22

스토리 보드를 사용하는 iOS 7 이상

바닥 글 로을 드래그하면 UIView됩니다 UITableView. 바닥 글보기의 높이를 0으로 설정하십시오.


18

이 시도. 그것은 나를 위해 일했다 :

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}

14

스위프트

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }

11

Swift를 사용 하는 경우 테이블 뷰를 관리하는 컨트롤러의 viewDidLoad 에 다음 코드를 추가하십시오 .

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView()
}

8

끝에 빈 바닥 글을 추가하면 빈 셀이 숨겨 지지만 아주 못생긴 것처럼 보입니다.

tableView.tableFooterView = UIView()

여기에 이미지 설명을 입력하십시오

더 나은 접근 방법이 있습니다. 바닥 글로 테이블 뷰의 끝에 1 포인트 라인을 추가하면 빈 셀도 더 이상 표시되지 않습니다.

let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView

여기에 이미지 설명을 입력하십시오


매우 좋은 입력이지만 하단에 두꺼운 구분 기호 색을 사용하여 마지막 셀을 만들 필요가 없으며 셀의 배경색을 동일하게 지정하면 사라집니다.
— Gustavo Baiocchi Costa

그러나 당신은 선호합니다. 그러나 나는 "완료되지 않은"분리기가 꽤 추악하게 보인다고 생각합니다.
— Darko


7

J. Costa의 솔루션 향상 : 다음 코드 줄을 사용하여 테이블을 전체적으로 변경할 수 있습니다.

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

첫 번째 가능한 방법 내부 (보통 AppDelegate, in : application:didFinishLaunchingWithOptions:method).


2
이 중 하나를 조심하십시오. 의도 한 바닥 글을 재정의 할 수 있고 정신에 대해 하루나 이틀을 보낼 수 있습니다. 또한 tableFooterView에는 UI_APPEARANCE_SELECTOR로 표시되지 않으므로 실제 동작은 언제든지 변경 될 수 있습니다.
— mwright

6

이 질문에 대한 답변이 허용되었다는 것을 알고 있지만의 추가 구분선을 숨기는 방법에 대한 다른 방법을 여기에 넣었습니다 UITableView.

tableView의 표준 구분선을 숨기고 각 셀의 상단에 사용자 정의 선을 추가 할 수 있습니다.

최신 정보:

맞춤 구분 기호를 추가하는 가장 쉬운 방법은 간단한 UIView1px 높이 를 추가하는 것 입니다.

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];

또는

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

또는

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

또는 내가 좋아하는 가장 좋고 간단한 방법은

self.tableView.tableFooterView = [[UIView alloc] init];

하나를 시도하십시오.


6

이 질문에 대한 많은 답변을 찾을 수 있습니다. 대부분 UITableView의 tableFooterView속성을 사용한 조작에 대해서는 빈 행을 숨기는 적절한 방법입니다. 편의상 Interface Builder에서 빈 행을 켜거나 끌 수있는 간단한 확장을 만들었습니다. 이 요지 파일 에서 확인할 수 있습니다 . 시간이 조금 절약 될 수 있기를 바랍니다.

extension UITableView {

  @IBInspectable
  var isEmptyRowsHidden: Bool {
        get {
          return tableFooterView != nil
        }
        set {
          if newValue {
              tableFooterView = UIView(frame: .zero)
          } else {
              tableFooterView = nil
          }
       }
    }
}

용법:

tableView.isEmptyRowsHidden = true

여기에 이미지 설명을 입력하십시오


5

uitableview 추가 구분선 숨기기 빠른 구분선 추가 swift 3.0에서 숨기기

 self.tbltableView.tableFooterView = UIView(frame: .zero)

5

마지막 셀 다음에 구분 기호를 원하지 않으면 바닥 글에 0에 가깝지만 0이 아닌 높이가 필요합니다.

당신의 UITableViewDelegate:

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

1
훌륭한! 나를 위해 일했다!!
— Antony Raphel


3

x0 y-1 위치에서 배경색, 너비 100 %, 높이 1px로 원하는 구분 기호 색상을 사용하여 뷰를 tableViewCell에 추가하십시오. tableViewCell이 서브 뷰를 자르지 않도록하고 tableView가 대신해야합니다.

따라서 코드 또는 IB 당 해킹없이 기존 셀 사이에서만 절대적이고 간단한 분리자를 얻을 수 있습니다.

참고 : 세로 상단 바운스에서 첫 번째 구분 기호가 표시되지만 문제가되지는 않지만 기본 iOS 동작입니다.


3

고정 된 수의 고정 된 높이 행을 표시하기 위해 테이블 ​​뷰를 사용하고 있었기 때문에 단순히 크기를 조정하여 스크롤 할 수 없게 만들었습니다.


3

프로그래밍 방식으로 UItableview 하단에서 추가 구분선을 제거하려면 다음 두 줄의 코드를 적어두면 추가 구분자가 제거됩니다.

tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;

이 트릭은 항상 나를 위해 일하고, 직접 시도하십시오.


2

나는 하나의 수락 된 답변 (iOS 9+, Swift 2.2)을 구현하는 데 행운이있었습니다. 나는 구현을 시도했다 :

self.tableView.tableFooterView = UIView(frame: .zero)

그러나, 나의 영향을 미치지 않았다 tableView-나는 그것이 내가 사용하고 있다는 사실과 관련이 있다고 생각합니다 UITableViewController.

대신, 나는 viewForFooterInSection메소드 를 재정의해야했습니다 ( tableFooterView다른 곳에 설정하지 않았습니다 ).

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView(frame: .zero)
}

이것은 tableView단일 섹션으로 잘 작동했습니다 (여러 섹션이있는 경우 마지막 섹션을 지정해야 함).


2

섹션이 하나 뿐인 경우 가장 빠르고 쉬운 방법은 테이블 뷰 스타일을 "일반"에서 "그룹화"로 설정하는 것입니다. (이미지 참조)

TableView 그룹화

더 많은 섹션이있는 경우 헤더 높이를 0으로 설정해야합니다 (고객 / 고객 / 프로젝트 관리자의 취향에 따라 다름)

더 많은 섹션이 있고 헤더를 엉망으로 만들고 싶지 않은 경우 (가장 간단한 경우에는 한 줄 임에도 불구하고) UIView를 바닥 글로 설정해야합니다 (이전 답변에서 설명한 것처럼)


2

스위프트 4.0 확장

스토리 보드를위한 약간의 확장 :

여기에 이미지 설명을 입력하십시오

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}

2

빠르고 쉬운 스위프트 4 웨이.

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

정적 셀이있는 경우 인스펙터 창에서 구분 기호를 끌 수도 있습니다. (구분자가 필요한 경우에는 바람직하지 않습니다.이 경우 위에 표시된 방법을 사용하십시오) 인스펙터 창


새로운 UIView를 tableFooterView로 설정하는 것은 이미 10 번 응답되었으며, 왜 더 나은 코드 (당신이 누락되었습니다 super.viewDidLoad()) 에 대한 더 나은 설명과 위키 답변에 포함되어 있습니다. 모든 구분 기호를 제거하는 것은 실제로이 질문에 관한 것이 아니므로 마지막 편집을 롤백하거나 답을 완전히 삭제하십시오.
— Cœur

1

UITableview에서 원하지 않는 공간을 제거하려면 아래 두 가지 방법을 사용할 수 있습니다

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

1

전체적으로 도움이되는이 작은 테이블 확장을 추가했습니다.

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}

1

이것으로 시도

에 대한 목표 C

- (void)viewDidLoad 
 {
  [super viewDidLoad];
  // This will remove extra separators from tableview
  self.yourTableView.tableFooterView = [UIView new];
}

대한 스위프트

override func viewDidLoad() {
 super.viewDidLoad()
 self.yourTableView.tableFooterView = UIView()
}

0

이 시도

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];

0

UIKit(가) 때 빈 셀을 만들지 않습니다 tableView있다 tableFooterView. 그래서 우리는 트릭을 만들고 높이가 0 인 UIView객체를 바닥 글로 지정할 수 있습니다 tableView.

tableView.tableFooterView = UIView()

0

경우에 당신은이 searchbar에 view(예를 들어 결과의 수를 제한하기 위해), 당신은 또한에 다음을 추가해야 shouldReloadTableForSearchString하고shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];

0

스위프트에서 (I 4.0을 사용하고 있습니다), 사용자 정의 작성하여이 작업을 수행 할 수 있습니다 UITableViewCell클래스 및 방법. 그런 다음 모두 0 . (테이블 뷰가있는 메인 클래스는 배경이 깨끗합니다).overridingsetSelectedseparator insets

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // eliminate extra separators below UITableView
    self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.