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
'code' 카테고리의 다른 글
배경 이미지 : 이미지가 작은 경우 전체 div를 채우는 방법과 그 반대의 경우 (0) | 2020.11.06 |
---|---|
사용자의 브라우저 URL을 Nodejs의 다른 페이지로 리디렉션하는 방법은 무엇입니까? (0) | 2020.11.06 |
OpenSSL을 사용하여 프로그래밍 방식으로 X509 인증서 생성 (0) | 2020.11.06 |
스몰 토크의 특징 (0) | 2020.11.06 |
Android에서 새 연락처를 추가하는 방법 (0) | 2020.11.06 |