Исключите дополнительные сепараторы под UITableView

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

Как удалить эти ячейки?

image for extra separator lines in UITableView

30 ответов


построитель интерфейса (iOS 9+)

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

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

обратите внимание, что, регулируя высоту, вы можете повлиять на то, как обрабатывается "Нижний отскок" таблицы, как вы предпочитаете. (Высота zero обычно штраф.)

enter image description here


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

Свифт

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

С

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];
}

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

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

- (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 store...) и замкнуло addHeaderAndFooter способ проверить. без, у меня есть дополнительные разделители строк; с кодом у меня есть то, что вы видите в этом окне: нет разделителей строк таблицы изображение. Так Я не уверен, почему это не сработало бы для вас. Более того, для меня имеет смысл, что любой пользовательский нижний колонтитул в представлении таблицы обязательно должен остановить рисование разделителей строк для пустых строк ниже него. Это было бы ужасно. Для справки, я посмотрел на таблицы, где было больше строк, чем можно было просмотреть на экране, а затем для таблицы с двумя рядами. В обоих случаях никаких посторонних сепараторов.

возможно, ваши пользовательские представления не были добавлены. Чтобы проверить это, установите цвет фона для чего-то другого, чем clearColor, например, [UIColor redColor]. Если вы не видите красные полосы внизу стола, ваш нижний колонтитул не был установлен.


удаление дополнительных строк разделителя для пустых строк в UITableView в Свифт

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];
}

или даже проще-где вы настраиваете свой tableview, добавьте эту строку:

//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 еще раз:)


для iOS 7 + с помощью раскадровок

просто перетащите 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:

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

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

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

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


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

override func viewDidLoad() {
    super.viewDidLoad()

    //...

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

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

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


просто добавьте этот код (Свифт) . .

tableView.tableFooterView = UIView()

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

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

обновление:

самый простой способ добавить пользовательский разделитель-добавить просто UIView в 1 пиксель высота:

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 дополнительный разделитель линии скрыть дополнительные разделители линии скрыть в swift 3.0

 self.tbltableView.tableFooterView = UIView(frame: .zero)

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


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

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

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


SWIFT 3.0 С tableView.tableFooterView = UIView()


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

в своем UITableViewDelegate:

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

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

tableView.sectionFooterHeight = 0.f;

tableView.sectionHeaderHeight = 0.f;

этот трюк работает для меня все время, попробовать себя. @KPCoding...


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


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

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

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

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

enter image description here

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

попробуй такое

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

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

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

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

TableView Grouped

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

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


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

tableView.tableFooterView = UIView()

быстрый и легкий стремительный путь 4.

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

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


в Swift (я использую 4.0) вы можете выполнить это, создав пользовательский класс UITableViewCell и переопределив метод setSelected. Затем разделитель вставляет все в 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)
}

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

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

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

-(void)didMoveToSuperview {
    [super didMoveToSuperview];
    self.tableFooterView = [UIView new];
}

Я просто добавляю эту строку в функцию ViewDidLoad и исправляю проблему.

tableView.tableFooterView = [[UIView alloc] init];