Когда я настраиваю табличное представление с 4 строками, под заполненными строками все еще остаются дополнительные разделительные линии (или дополнительные пустые ячейки).
Как бы я удалил эти клетки?
Когда я настраиваю табличное представление с 4 строками, под заполненными строками все еще остаются дополнительные разделительные линии (или дополнительные пустые ячейки).
Как бы я удалил эти клетки?
Ответы:
Просто перетащите UIView на стол. В раскадровке он будет располагаться вверху под вашими пользовательскими ячейками. Вы можете предпочесть название «нижний колонтитул».
Здесь это показано зеленым для ясности, вы, вероятно, захотите чистый цвет.
Обратите внимание, что, регулируя высоту, вы можете по своему усмотрению влиять на то, как обрабатывается «нижний отскок» таблицы. (Высота ноль обычно в порядке).
Чтобы сделать это программно:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
или, если вы предпочитаете,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Добавьте к контроллеру табличного представления ...
- (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];
}
tableFooterView
оставляет разделитель в последней ячейке в строке, так как таблица все еще ожидает содержимое ниже этой ячейки. Использование исторического способа устранит этот последний разделитель и в целом выглядит лучше.
Вот еще один способ сделать это без сгруппированного стиля таблицы, и вы, вероятно, не догадаетесь. Добавление верхнего и нижнего колонтитула к таблице (возможно, одного или другого достаточно, еще не проверено) приводит к исчезновению разделителей из строк-заполнителей / пустых строк.
Я наткнулся на это, потому что я хотел немного места сверху и снизу столов, чтобы уменьшить риск нажатия кнопок вместо ячейки стола с мясистыми пальцами. Вот метод для вставки пустого представления в качестве верхнего и нижнего колонтитула. Используйте любую высоту, какую захотите, вы все равно уберете лишние разделительные линии.
- (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 я вернулся к коду в своем приложении (менеджер списков «AcmeLists» в магазине iTunes ...) и коротко замкнул метод addHeaderAndFooter для проверки. Без этого у меня есть дополнительные разделители строк; с кодом, у меня есть то, что вы видите в этом окне оснастки: нет таблицы разделителей строк изображения . Поэтому я не уверен, почему это не сработало бы для вас. Более того, для меня имеет смысл, что наличие любого пользовательского нижнего колонтитула в табличном представлении обязательно должно прекратить рисовать разделители строк для пустых строк под ним. Это было бы отвратительно. Для справки я посмотрел таблицы, в которых было больше строк, чем можно было увидеть на экране, а затем таблицу с двумя строками. В обоих случаях нет посторонних разделителей.
Возможно, ваши собственные представления не были добавлены. Для того, чтобы проверить , что установить цвет фона на нечто иное , чем clearColor
, например, [UIColor redColor]
. Если вы не видите красных полос внизу таблицы, значит, ваш нижний колонтитул не установлен.
Удаление лишних разделительных линий для пустых строк в UITableView в Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Я хотел бы расширить ответ WKW :
Простое добавление только нижнего колонтитула с высотой 0 добьется цели. (проверено на SDK 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
или даже проще - где вы настраиваете свое табличное представление, добавьте эту строку:
//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 снова :)
Просто перетащите UIView
в UITableView
нижний колонтитул. Установите высоту нижнего колонтитула в 0.
Попробуй это. Это сработало для меня:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Если вы используете Swift, добавьте следующий код в viewDidLoad контроллера, который управляет табличным представлением:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Вы можете просто добавить пустой нижний колонтитул в конце, тогда он будет скрывать пустые ячейки, но это также будет выглядеть довольно некрасиво:
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
просто добавьте этот код ( Swift ). ,
tableView.tableFooterView = UIView()
Продвижение решения J. Costa: вы можете внести глобальные изменения в таблицу, добавив следующую строку кода:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
внутри первого возможного метода (обычно в AppDelegate
, в: application:didFinishLaunchingWithOptions:
метод).
Я знаю, что этот вопрос был принят ответ, но я привел здесь различные способы, как скрыть дополнительную разделительную линию UITableView
.
Вы можете скрыть tableView
стандартную разделительную линию и добавить свою собственную строку вверху каждой ячейки.
Обновить:
Самый простой способ добавить пользовательский разделитель - добавить простую UIView
высоту 1px:
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];
Попробуйте любой из них;
Вы можете найти много ответов на этот вопрос. Большинство из них связаны с манипуляциями с атрибутом UITableView
's', tableFooterView
и это правильный способ скрыть пустые строки. Для удобства я создал простое расширение, которое позволяет включать / выключать пустые строки из Interface Builder. Вы можете проверить его из этого GIST файла. Я надеюсь, что это может сэкономить немного вашего времени.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Применение:
tableView.isEmptyRowsHidden = true
uitableview дополнительные разделительные линии скрыть дополнительные разделительные линии скрыть в Swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Если вам не нужен какой-либо разделитель после последней ячейки, тогда вам нужна близкая к нулю, но ненулевая высота для нижнего колонтитула.
В вашем UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift прекрасно работает с:
tableView.tableFooterView = UIView()
Просто добавьте представление с желаемым цветом разделителя в качестве цвета фона, шириной 100%, высотой 1px в позиции x0 y-1 к вашему tableViewCell. Убедитесь, что tableViewCell не обрезает подпредставления, вместо этого tableView должен.
Таким образом, вы получаете абсолютно простой и работающий разделитель только между существующими ячейками без какого-либо взлома кода или IB.
Примечание. На вертикальной отскок вверху отображается первый разделитель, но это не должно быть проблемой, потому что это поведение iOS по умолчанию.
Чтобы программно удалить лишние разделительные линии из нижней части UItableview, просто запишите следующие две строки кода, и он удалит из него дополнительный разделитель.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Этот трюк работает на меня все время, попробуйте сами.
Мне посчастливилось реализовать один фрагмент принятого ответа (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
одного раздела (если у вас есть несколько разделов, вам нужно указать последний).
Если у вас есть только один раздел, то самый быстрый и простой способ - просто установить стиль представления таблицы с «Обычный» на «Сгруппированный». (см. изображение)
Если у вас есть больше разделов, вам может потребоваться установить нулевую высоту заголовка (в зависимости от вкуса вашего / вашего клиента / вашего руководителя проекта)
Если у вас есть больше разделов, и вы не хотите связываться с заголовками (даже если в простейшем случае это всего лишь одна строка), вам нужно установить UIView в качестве нижнего колонтитула, как это было объяснено в предыдущих ответах)
Быстрый и легкий Swift 4 way.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Если у вас есть статические клетки. Вы также можете отключить разделитель из окна инспектора. (это не будет желательно, если вам нужен разделитель. В этом случае используйте метод, показанный выше)
super.viewDidLoad()
), и он включен в вики-ответ сверху. Что касается удаления всех разделителей, то в действительности это не тот вопрос, поэтому лучше откатить последнее изменение и / или полностью удалить свой ответ.
Если вы хотите удалить ненужное место в UITableview, вы можете использовать ниже два метода
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Я добавил это небольшое расширение таблицы, которое помогает во всем
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Попробуй с этим
для цели 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()
}
В случае , если у вас есть searchbar
в вашем view
(чтобы ограничить количество результатов, например), вы должны добавить следующее в shouldReloadTableForSearchString
иshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
В Swift (я использую 4.0), вы можете сделать это путем создания пользовательского UITableViewCell
класса, а также overriding
на setSelected
метод. Тогда separator insets
все к 0 . (мой основной класс с табличным представлением имеет четкий фон) цвет.
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)
}