it-roy-ru.com

Устранить лишние разделители ниже UITableView

Когда я настраиваю табличное представление с 4 строками, под заполненными строками все еще остаются дополнительные разделительные линии (или дополнительные пустые ячейки).

Как бы я удалил эти клетки?

 image for extra separator lines in UITableView

645
RoundOutTooSoon

Интерфейсный конструктор (iOS 9+)

Просто перетащите UIView на стол. В раскадровке он будет располагаться вверху под вашими пользовательскими ячейками. Вы можете предпочесть название «нижний колонтитул».

Здесь это показано зеленым для ясности, вы, вероятно, захотите чистый цвет.

Обратите внимание, что, регулируя высоту, вы можете по своему усмотрению влиять на то, как обрабатывается «отскок снизу» таблицы. (Высота ноль обычно в порядке).

 enter image description here


Чтобы сделать это программно: 

Стриж

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.tableFooterView = UIView()
}

Objective-C

iOS 6.1+

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [UIView new];
}

или, если вы предпочитаете,

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

Исторически в iOS:

Добавьте к контроллеру табличного представления ...

- (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];
}
1410
J. Costa

Вот еще один способ сделать это без сгруппированного стиля таблицы, и вы, вероятно, не догадаетесь. Добавление заголовок и нижний колонтитул к столу (возможно, одного или другого достаточно, еще не проверил) заставляет разделители исчезать из строк заполнения/пустых строк.

Я наткнулся на это, потому что я хотел немного места сверху и снизу столов, чтобы уменьшить риск нажатия кнопок вместо ячейки стола с мясистыми пальцами. Вот метод для вставки пустого представления в качестве верхнего и нижнего колонтитула. Используйте любую высоту, какую захотите, вы все равно уберете лишние разделительные линии.

- (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]. Если вы не видите красных полос внизу таблицы, значит, ваш нижний колонтитул не установлен.

128
wkw

Удаление лишних разделительных линий для пустых строк в UITableView в Swift

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTableview.tableFooterView = UIView()
}
57
dineshthamburu

Я хотел бы расширить 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 снова :)

36
Guntis Treulands

Для iOS 7+ с использованием раскадровок

Просто перетащите UIView в свой UITableView в качестве нижнего колонтитула. Установите высоту нижнего колонтитула в 0.

22
Kyle Clegg

Попробуй это. Это сработало для меня: 

- (void) viewDidLoad
{
  [super viewDidLoad];

  // Without ARC
  //self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];

  // With ARC, tried on Xcode 5
  self.tableView.tableFooterView = [UIView new];
}
18
Ambili B Menon

Для Свифта:

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.tableFooterView = UIView()
    }
12
Sebastian

Вы можете просто добавить пустой нижний колонтитул в конце, тогда он будет скрывать пустые ячейки, но это также будет выглядеть ужасно:

tableView.tableFooterView = UIView()

 enter image description here

Есть лучший подход: добавьте 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

 enter image description here

8
Darko

Если вы используете Swift, добавьте следующий код в viewDidLoad контроллера, который управляет табличным представлением:

override func viewDidLoad() {
    super.viewDidLoad()

    //...

    // Remove extra separators
    tableView.tableFooterView = UIView(frame: CGRectZero)
}

Для Swift 4.0 CGRectZero устарела, поэтому вы должны использовать CGRect.zero

8
Babatunde Adeyemi

Продвижение решения J. Costa: вы можете внести глобальные изменения в таблицу, добавив следующую строку кода:

[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];

внутри первого возможного метода (обычно в AppDelegate, в: application:didFinishLaunchingWithOptions: метод).

7
o.shnn

Я знаю, что на этот вопрос принят ответ, но я привожу здесь различные способы, как скрыть дополнительную разделительную строку 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];

Попробуйте любой из них;

6
iPatel

просто добавьте этот код ( Swift ). ,.

tableView.tableFooterView = UIView()
6
roy

uitableview дополнительные разделительные линии скрыть дополнительные разделительные линии скрыть в Swift 3.0

 self.tbltableView.tableFooterView = UIView(frame: .zero)
5
Parth Changela

Я использовал табличное представление, чтобы показать фиксированное количество строк с фиксированной высотой, поэтому я просто изменил его размер и сделал его недоступным для прокрутки.

5
Casebash

Swift прекрасно работает с:

tableView.tableFooterView = UIView()
4
Marcelo Gracietti

Если вам не нужен какой-либо разделитель после последней ячейки, тогда вам нужна близкая к нулю, но ненулевая высота для нижнего колонтитула.

В вашем UITableViewDelegate:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}
4
Cœur

Просто добавьте представление с желаемым цветом разделителя в качестве цвета фона, шириной 100%, высотой 1px в позиции x0 y-1 к вашему tableViewCell. Убедитесь, что tableViewCell не обрезает подпредставления, вместо этого tableView должен. 

Таким образом, вы получаете абсолютно простой и работающий разделитель только между существующими ячейками без какого-либо взлома кода или IB.

Примечание. На вертикальной отскок вверху отображается первый разделитель, но это не должно быть проблемой, потому что это поведение iOS по умолчанию.

4
maaalex

Вы можете найти много ответов на этот вопрос. Большинство из них связаны с манипуляциями с атрибутом 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

 enter image description here

3
Stanislau Baranouski

Чтобы программно удалить лишние разделительные линии из нижней части UItableview, просто запишите следующие две строки кода, и он удалит из него дополнительный разделитель.

tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;

Этот трюк работает на меня все время, попробуйте сами.

3
Kalpesh Panchasara

Если у вас есть только один раздел, то самый быстрый и простой способ - просто установить стиль представления таблицы с «Обычный» на «Сгруппированный». (см. изображение)

 TableView Grouped

Если у вас есть больше разделов, вам может потребоваться установить нулевую высоту заголовка (в зависимости от вкуса вашего/вашего клиента/вашего руководителя проекта)

Если у вас есть больше разделов, и вы не хотите связываться с заголовками (даже если в простейшем случае это всего лишь одна строка), вам нужно установить UIView в качестве нижнего колонтитула, как это было объяснено в предыдущих ответах)

1
Gefilte Fish

Если вы хотите удалить ненужное место в UITableview, вы можете использовать ниже два метода 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.1;
}
1
Hari c

Расширение Swift 4.0

Просто небольшое расширение для раскадровки:

 enter image description here

extension UITableView {
    @IBInspectable
    var hideSeparatorForEmptyCells: Bool {
        set {
            tableFooterView = newValue ? UIView() : nil
        }
        get {
            return tableFooterView == nil
        }
    }
}
1
Nik Kov

Быстрый и легкий Swift 4 way. 

override func viewDidLoad() {
     tableView.tableFooterView = UIView(frame: .zero)
}

Если у вас есть статические клетки. Вы также можете отключить разделитель из окна инспектора. (это не будет желательно, если вам нужен разделитель. В этом случае используйте метод, показанный выше)  inspector window

1
Alix

Попробуй с этим

для Цель C

- (void)viewDidLoad 
 {
  [super viewDidLoad];
  // This will remove extra separators from tableview
  self.yourTableView.tableFooterView = [UIView new];
}

для Swift

override func viewDidLoad() {
 super.viewDidLoad()
 self.yourTableView.tableFooterView = UIView()
}
1
Atanu Mondal

Мне посчастливилось реализовать один фрагмент принятого ответа (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 с одним разделом (если у вас есть несколько разделов, вам нужно указать последний).

1
BAP

Я добавил это небольшое расширение таблицы, которое помогает во всем

extension UITableView {
     func removeExtraCells() {
         tableFooterView = UIView(frame: .zero)
     }
}
0
Suresh Varma

Если у вас есть searchbar в вашей view (например, для ограничения количества результатов), вы также должны добавить следующее в shouldReloadTableForSearchString и shouldReloadTableForSearchScope:

controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
0
user3900346

UIKit не создает пустую ячейку, когда tableView имеет tableFooterView. Таким образом, мы можем сделать трюк и назначить объект UIView нулевой высоты как нижний колонтитул tableView.

tableView.tableFooterView = UIView()
0
iMuzahid

Попробуй это

self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
0
vishnu

В 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)
}
0
chillbumps