16 ответов:
Обновление ПО 9/14/15. Мой оригинальный ответ устарел, но он по-прежнему является универсальным решением для всех версий iOS:
вы можете скрыть
tableViewстандартная разделительная линия и добавьте свою пользовательскую строку в верхней части каждой ячейки. Самый простой способ добавить пользовательский разделитель-добавить простоUIView1px высота: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];
лучшим решением является добавление нижнего колонтитула. Следующий код отлично скрывает строку последней ячейки:
С
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];Swift 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как это иногда сообщает неправильное значение в зависимости от того, когда вы его вызываете. Смотрите сообщение о неправильных границах в ландшафтном режиме
нет, вы не можете этого сделать. Эти сепараторы довольно вырезать и сухой, стиль и цвет вот и все. Однако альтернативным решением может быть отключение всех разделителей вместе и установка фонового изображения с горизонтальной линией внизу для всех ячеек, кроме последней.
E. X:
[tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; if (indexPath.row == [myArray count] - 1) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]]; [cell setBackgroundView:imageView]; }
вот средство, которое я в настоящее время использую. возможно, это не лучший подход, но он работает.
удалите 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; }
для 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.
Swift 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 } }
добавьте эту строку кода в
viewDidLoad().tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0.001))Это убедитесь, что последний разделитель будет заменен и замененный (невидимый) вид нижнего колонтитула не будет занимать никакой дополнительной высоты. Поскольку ширина нижнего колонтитула будет управляться
UITableView, Так что вы можете установить его в 0.
найти последний индекс ячейки в
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 должен содержать только объявления свойств для
hideLastSeparatorиhideLastSeparatorView.
Если вы хотите скрыть разделитель, используйте новый класс и установитеmyTableView.hideLastSeparator = YES.
Способ, которым это работает, заключается в блокировании последнего разделителя путем добавления нового представления над ним.это несколько проще в использовании на мой взгляд (чем использование пользовательского разделителя или установка последнего separatorInset последней ячейки) и позволяет избежать некоторых странные анимации, что метод установки
tableFooterViewиногда вызывает (например, во время вставки/удаления строк или других анимаций таблицы).
Swift 4.2
чтобы получить разделитель, который идет слева направо в вашей последней ячейке, добавьте это в свой
UITableViewDataSource'stableView(_:cellForRowAt:)реализация:if tableView.numberOfRows(inSection: indexPath.section) - 1 == indexPath.row { cell.separatorInset = .zero }Если вам не нужен разделитель для одной конкретной ячейки, подумайте о том, чтобы нарисовать свой собственный разделитель и установить
tableView.separatorStyle = .none.
расширяя ответ Tonny Xu, у меня есть несколько разделов, и это, похоже, работает для удаления последнего разделителя ячеек
if(indexPath.row == [self.tableView numberOfRowsInSection:indexPath.section] - 1) { self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)]; }на
cellForRowAtIndexPathисточник

Comments