code

UITableView에서 마지막 셀의 마지막 테두리를 제거하는 방법은 무엇입니까?

codestyles 2020. 11. 6. 08:18
반응형

UITableView에서 마지막 셀의 마지막 테두리를 제거하는 방법은 무엇입니까?


내 앱에서 UITableView내 문제는 .NET에서 마지막 셀의 마지막 테두리를 제거하고 싶다는 것입니다 UITableView.

다음 이미지를 확인하십시오.

여기에 이미지 설명 입력


9/14/15에 업데이트되었습니다. 내 원래 대답은 쓸모가 없지만 여전히 모든 iOS 버전에 대한 보편적 인 솔루션입니다.

tableView의 표준 구분선을 숨기고 각 셀의 맨 위에 사용자 정의 선을 추가 할 수 있습니다. 사용자 지정 구분 기호를 추가하는 가장 쉬운 방법 UIView은 1px 높이의 간단한 추가하는 것 입니다.

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.bounds.size.width, 1)];
separatorLineView.backgroundColor = [UIColor grayColor];
[cell.contentView addSubview:separatorLineView];

지금까지 셀 아래에 추가 구분 기호를 숨기는 다른 방법구독합니다 (iOS 6.1 이상에서 작동).

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

가장 좋은 해결책은 바닥 글보기를 추가하는 것입니다. 다음 코드는 마지막 셀의 줄을 완벽하게 숨 깁니다.

목표 -C

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];

스위프트 4.0

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

iOS 7에는 더 쉬운 솔루션이 있습니다. 셀이 마지막 셀이라고 가정합니다.

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);

이것은 iOS 7 및 8에서 나를 위해 작동합니다.

cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(tableView.bounds));

참고 : tableView.bounds호출시기에 따라 잘못된 값을보고하는 경우가 있으므로 사용에주의 하십시오. 가로 모드에서 잘못된 경계보고를 참조하십시오.


이 코드 줄을 viewDidLoad().

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0.001))

이렇게하면 마지막 구분 기호가 교체되고 바닥 글보기가 추가 높이를 차지하지 않게됩니다. 바닥 글보기의 너비는에서 관리 UITableView하므로 0으로 설정할 수 있습니다.


내 짧은 버전 :

self.tblView.tableFooterView = [UIView new];

내가 현재 사용하는 치료법은 다음과 같습니다. 최선의 방법은 아니지만 작동합니다.

SeparatorColor 및 setSeparatorStyle을 제거하여 사용자 지정 구분 기호 만들기

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [self.tableView setSeparatorColor:[UIColor clearColor]];
}

Tableview 배경이있는 각 셀에 사용자 지정 구분 기호 추가

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    ...

    UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.size.height-1, 320, 1)];
    separatorLineView.backgroundColor = self.tableView.backgroundColor;
    [cell.contentView addSubview:separatorLineView];

    return cell;
}

Swift에서 간단히 :

tableView.tableFooterView = UIView()

iOS 12에서 테스트 된 Swift 4 용 확장 기반 솔루션

빈보기를 설정 height = 1하면 마지막으로 보이는 셀 height = 0의 구분 기호도 제거 되지만 설정 하면 빈 셀의 구분 기호 만 제거됩니다.

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

    func removeSeparatorsOfEmptyCellsAndLastCell() {
        tableFooterView = UIView(frame: CGRect(origin: .zero, size: CGSize(width: 0, height: 1)))
    }
}

iOS 7 이상

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        BOOL bIsLastRow = NO;

        //Add logic to check last row for your data source
        NSDictionary *dict = [_arrDataSource objectAtIndex:indexPath.section];
        if([_arrDataSource lastObject] == dict)
        {
           bIsLastRow = YES;
        }

        //Set last row separate inset left value large, so it will go outside of view
        if ([cell respondsToSelector:@selector(setSeparatorInset:)]) 
        {
            [cell setSeparatorInset:UIEdgeInsetsMake(0, bIsLastRow ? 1000 :0, 0, 0)];
        }
    }

아래 코드는 UITableView의 마지막 행에서 구분 기호를 제거하는 데 도움이됩니다.

스위프트 3.0

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) { cell.separatorInset.right = cell.bounds.size.width } }


스위프트 4.2

마지막 셀에서 왼쪽에서 오른쪽으로 이동하는 구분 기호를 얻으려면 UITableViewDataSource's tableView(_:cellForRowAt:)구현에 다음을 추가하십시오 .

if tableView.numberOfRows(inSection: indexPath.section) - 1 == indexPath.row {
        cell.separatorInset = .zero
}

특정 셀에 대한 구분 기호를 원하지 않는 경우 고유 한 구분 기호를 그리고 설정하십시오 tableView.separatorStyle = .none.


_tableView.tableFooterView = [[UIView 할당] initWithFrame : CGRectZero];


cellForRow대리자 에서 마지막 셀 인덱스를 찾고 아래에서 코드 줄을 넣으십시오.

cell.separatorInset = UIEdgeInsetsMake(
    0.f,
    40.0f,
    0.f,
    self.view.frame.size.width-40.0f
);

또 다른 옵션은 서브 클래 싱입니다 UITableView.

@synthesize hideLastSeparator = _hideLastSeparator;
@synthesize hideLastSeparatorView = _hideLastSeparatorView;
-(void)setHideLastSeparator:(BOOL)hideLastSeparator {
    if (_hideLastSeparator == hideLastSeparator) {
        return;
    }
    _hideLastSeparator = hideLastSeparator;
    if (_hideLastSeparator) {
        _hideLastSeparatorView = [[UIView alloc] initWithFrame:CGRectMake(0, self.contentSize.height, self.bounds.size.width, 0.5f)];
        _hideLastSeparatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin;
        _hideLastSeparatorView.backgroundColor = self.backgroundColor;
        [self addSubview:_hideLastSeparatorView];
        [self hideSeparator];
    }
    else {
        [_hideLastSeparatorView removeFromSuperview];
        _hideLastSeparatorView = nil;
    }
}
-(void)setContentSize:(CGSize)contentSize {
    [super setContentSize:contentSize];
    if (_hideLastSeparator) {
        [self hideSeparator];
    }
}
-(void)hideSeparator {
    CGRect frame = _hideLastSeparatorView.frame;
    frame.origin.y = self.contentSize.height - frame.size.height;
    _hideLastSeparatorView.frame = frame;
}

The .h should only contain property declarations for hideLastSeparator and hideLastSeparatorView.
When wanting to hide the separator, use the new class and set myTableView.hideLastSeparator = YES.
The way this works is by obstructing the last separator by adding a new view over it.

This is somewhat easier to use in my opinion (than using a custom separator, or setting the last separatorInset of the last cell), and avoids some weird animations that the method of setting a tableFooterView sometimes causes (e.g. during row insertion/deletion or other table animations).


Expanding on Tonny Xu's answer, I have multiple sections and this seems to work for removing the last cells separator

if(indexPath.row == [self.tableView numberOfRowsInSection:indexPath.section] - 1)
{
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];
}

In the cellForRowAtIndexPath datasource

참고 URL : https://stackoverflow.com/questions/12168002/how-to-remove-the-last-border-of-the-last-cell-in-uitableview

반응형