Я настраиваю UITableView
. Я хочу скрыть линию, разделяющую последнюю клетку ... я могу это сделать?
Я знаю, что могу сделать, tableView.separatorStyle = UITableViewCellStyle.None
но это повлияет на все ячейки tableView. Я хочу, чтобы это затронуло только мою последнюю камеру.
Ответы:
в
viewDidLoad
, добавьте эту строку:и в
cellForRowAtIndexPath
:для iOS более низких версий
для верхних версий iOS 7 (включая iOS 8)
источник
[cell.contentView addSubview:line]
вместо[cell addSubview:line]
cellForRowAtIndexPath
. Помните, что клетки используются повторно. Каждый раз, когда эта ячейка используется повторно, вы добавляете другой вид разделительной линии. В больших списках это может повлиять на производительность прокрутки. И это просто не правильный способ сделать это.Вы можете использовать следующий код:
Свифт:
или :
по умолчанию Margin:
показать разделитель сквозной
Objective-C:
источник
UITableView
, в то время как принятый ответ работает.self.tableView.separatorColor = [UIColor clearColor];
исправлено.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
если я не вычту значение cell.layoutMargins.left, разделительная линия будет проведена от левой границы до левой границы (если есть).textLabel
за кадром.Чтобы продолжить ответ Хирен .
в ViewDidLoad и следующей строке:
Или, если вы используете XIB или раскадровки, замените « разделитель » на « нет »:
И в CellForRowAtIndexPath добавьте это:
Вот пример результата, в котором я отображаю табличное представление с динамическими ячейками (но имею только одно с содержимым). В результате, только один из них имеет разделитель, а не все «фиктивные» таблицы автоматически добавляются для заполнения экрана.
Надеюсь это поможет.
РЕДАКТИРОВАТЬ: Для тех, кто не всегда читает комментарии, на самом деле есть лучший способ сделать это с помощью нескольких строк кода:
источник
Если вы не хотите рисовать разделитель самостоятельно, используйте это:
Этот API доступен только начиная с iOS 7.
источник
separatorInset
кажется, вставляет содержимое ячейки, а также разделитель, требуя еще одного взлома для компенсации:cell.IndentationWidth = -10000;
separatorInset
0 для верхнего, левого и нижнего и ширины ячейки для правого:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
это позволяет избежать необходимости настраивать любые другие свойства ячейки.моя среда разработки
Приведенные выше ответы не работают для меня полностью
после попытки мое окончательно работающее решение:
и эффект:
источник
Установите
separatorInset.right = .greatestFiniteMagnitude
на свою камеру.источник
awakeFromNib
может привести к тому, что весь экран будет мигатьapplicationDidBecomeActive
В Swift 3, Swift 4 и Swift 5 вы можете написать расширение для UITableViewCell следующим образом:
Затем вы можете использовать это, как показано ниже (когда ячейка - это экземпляр вашей ячейки):
Действительно лучше назначить ширину ячейки табличного представления в виде левой вставки, а не случайное число. Потому что в некоторых размерах экрана, возможно, не сейчас, но в будущем ваши разделители все еще будут видны, потому что этого случайного числа может быть недостаточно. Кроме того, в iPad в ландшафтном режиме вы не можете гарантировать, что ваши разделители всегда будут невидимыми.
источник
Лучшее решение для iOS 7 и 8
Если ваше приложение вращаемое - используйте 3000.0f для левой постоянной вставки или вычислите его на лету. Если вы попытаетесь установить правую вставку, у вас есть видимая часть разделителя на левой стороне ячейки на iOS 8.
источник
В iOS 7 разделитель ячеек сгруппированных стилей UITableView выглядит немного иначе. Это выглядит примерно так:
Я попробовал ответ Кеменарана сделать это:
Однако это не похоже на работу для меня. Я не уверен почему. Поэтому я решил использовать ответ Хирен , но
UIView
вместо этогоUIImageView
нарисовал линию в стиле iOS 7:Если вы используете это, убедитесь, что вы указали правильную высоту представления таблицы во втором операторе if. Надеюсь это кому-нибудь пригодится.
источник
В своем подклассе UITableViewCell переопределите layoutSubviews и скройте _UITableViewCellSeparatorView. Работает под iOS 10.
источник
Я не верю, что этот подход будет работать при любых обстоятельствах с динамическими ячейками ...
Неважно, в каком методе tableview вы используете его для динамических ячеек, для ячейки, для которой вы изменили свойство inset, всегда будет устанавливаться свойство inset теперь каждый раз, когда оно удаляется, вызывая всплеск отсутствующих разделителей строк ... измените это сами.
Как-то так у меня сработало
Таким образом, вы обновляете состояние структуры данных при каждой загрузке
источник
В Swift с использованием iOS 8.4 :
Примечание: этот фрагмент выше будет работать на UITableView с использованием динамических ячеек. Единственная проблема, с которой вы можете столкнуться, это когда вы используете статические ячейки с категориями, тип разделителя, отличный от none, и сгруппированный стиль для табличного представления. Фактически, в данном конкретном случае он не будет скрывать последнюю ячейку каждой категории. Чтобы преодолеть это, я нашел решение установить нулевой разделитель ячеек (с помощью IB), а затем вручную создать (с помощью кода) свой вид строки для каждой ячейки. Для примера, пожалуйста, проверьте фрагмент ниже:
источник
Используйте этот подкласс, набор
separatorInset
не работает для iOS 9.2.1, содержимое будет сжато.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
источник
Гораздо проще и логичнее сделать это:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
В большинстве случаев вы не хотите видеть только последний разделитель tableCiewCell. При таком подходе удаляется только последний разделитель tableViewCell, и вам не нужно думать о проблемах с автоматическим размещением (т. Е. О вращающемся устройстве) или значениях жесткого кода для настройки вставок разделителя.
источник
В
willdisplaycell
:источник
Используя Swift 3 и применяя самый быстрый хакерский метод, вы можете улучшить код, используя расширения :
Затем, когда вы настраиваете ячейку:
источник
источник
Лучший способ добиться этого - отключить разделители строк по умолчанию,
UITableViewCell
создать подкласс и добавить собственный разделитель строк в качестве подпредставленияcontentView
- см. Ниже настраиваемую ячейку, которая используется для представления объекта типаSNStock
, имеющего два строковых свойства,ticker
иname
:Чтобы отключить использование разделителя в строке по умолчанию,
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
. Потребительская сторона относительно проста, см. Пример ниже:источник
Для Swift 2:
добавьте следующую строку в
viewDidLoad()
:источник
Если принятый ответ не работает, вы можете попробовать это:
Здорово ;)
источник
Попробуйте приведенный ниже код, может помочь решить вашу проблему
источник
источник
Вы должны взять пользовательскую ячейку и добавить метку и установить ограничения, такие как метка должна охватывать всю область ячейки. и напишите ниже строку в конструкторе.
Также установите поле UITableView Layout, как указано ниже
источник
Я не мог скрыть разделитель в определенной ячейке, кроме как использовать следующий обходной путь
источник
Для iOS7 и выше, более чистый способ - использовать INFINITY вместо жестко заданного значения. Вам не нужно беспокоиться об обновлении ячейки при повороте экрана.
источник
Как отмечали (многие) другие, вы можете легко скрыть все разделители UITableViewCell, просто отключив их для всего UITableView; например, в вашем UITableViewController
К сожалению, это настоящая PITA для каждой ячейки , о чем вы действительно просите.
Лично я пробовал многочисленные варианты изменения
cell.separatorInset.left
, опять же, как предложили (многие) другие, но проблема в том, чтобы процитировать Apple (выделение добавлено):« ... Вы можете использовать это свойство, чтобы добавить пространство между содержимым текущей ячейки и левым и правым краями таблицы. Положительные значения вставки перемещают содержимое ячейки и разделитель ячеек внутрь и от краев таблицы ... »
Поэтому, если вы попытаетесь «спрятать» разделитель, переместив его за пределы экрана вправо, вы также можете сделать отступ в тоже самое для contentView вашей ячейки. Как предполагает Crifan, вы можете попытаться компенсировать этот неприятный побочный эффект, установив
cell.indentationWidth
иcell.indentationLevel
соответственно переместив все обратно, но я обнаружил, что это также ненадежно (контент по-прежнему получает отступы ...).Самый надежный способ, который я нашел, это
layoutSubviews
переопределить простой подкласс UITableViewCell и установить правую вставку так, чтобы он попадал в левую вставку, делая разделитель равным 0 ширины и таким образом невидимым [это необходимо сделать в layoutSubviews, чтобы автоматически обрабатывать повороты. Я также добавляю удобный метод в свой подкласс, чтобы включить это.Предостережение: не существует надежного способа восстановить исходную правую вставку, поэтому вы не можете «скрыть» разделитель, поэтому я использую необратимый
hideSeparator
метод (против предоставления разделителя IsHidden). Пожалуйста, обратите внимание, что separatorInset сохраняется в повторно используемых ячейках, поэтому, поскольку вы не можете «скрыть», вам нужно держать эти ячейки скрытого разделителя изолированными в их собственном reuseIdentifier.источник
Моим требованием было скрыть разделитель между 4-й и 5-й ячейками. Я достиг этого
источник
Swift:
Objective-C:
источник
Внутри класса ячеек таблицы. поставить эти строки кода
источник
На iOS9 у меня была проблема, заключающаяся в том, что смена вставок разделителя также влияет на позиционирование text- и detailLabel.
Я решил это с этим
источник