Как дать пространство между двумя ячейками в табличном представлении? - PullRequest
47 голосов
/ 25 августа 2011

Я хочу пробел между двумя ячейками в табличном представлении,

Я хочу такую ​​ячейку, как

enter image description here

Как я могу это сделать?

Ответы [ 24 ]

119 голосов
/ 06 февраля 2013

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

1. установить количество ячеек, которое вам нужно, как секции:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return 3; // in your case, there are 3 cells
}

2. вернуть только 1 ячейку для каждой секции

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

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

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 10.; // you can have your own choice, of course
}

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

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *headerView = [[UIView alloc] init];
    headerView.backgroundColor = [UIColor clearColor];
    return headerView;
}
25 голосов
/ 24 октября 2012

Лучший способ получить пространство между двумя ячейками в TableView, объявить номера секций, которые вы хотите, в методе делегата numberofsections таким образом

Например, у вас есть массив из 10 объектов

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  return [array count]; //array count returns 10
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {


    return 1;// this should be one because it will create space between two cells if you want space between 4 cells you can modify it.
}

Тогда важным моментом является метод делегата cellForRowAtIndexPath, который необходимо использовать indexpath.section, но не indexpath.row

cell.textLabel.text=[NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.section]];

То есть, проверьте в табличном представлении пространство между двумя ячейками. Наслаждайтесь!

21 голосов
/ 25 августа 2011

Вы можете создать Разделы TableView также в UITableView ... Эти методы являются обязательными, поэтому создайте разделы, и в каждом разделе вы можете создать отдельную ячейку, как на вашем рисунке.

16 голосов
/ 20 февраля 2014

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

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

13 голосов
/ 11 февраля 2015

Цель - C

 UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];/// change size as you need.       
 separatorLineView.backgroundColor = [UIColor whiteColor];// you can also put image here
 [cell.contentView addSubview:separatorLineView];

Swift 3 (Это также будет работать для Swift 4)

var separatorLineView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 3))
/// change size as you need.       
separatorLineView.backgroundColor = UIColor.white
// you can also put image here
cell.contentView.addSubview(separatorLineView)

Это сработало для меня.

10 голосов
/ 23 января 2015

Если кто-то ищет Swift версию.Вот, пожалуйста.

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 10; // space b/w cells
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return items.count // count of items
}

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = UIView()
    header.backgroundColor = UIColor.clearColor()
    return header
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}
6 голосов
/ 05 декабря 2013

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    if (indexPath.row % 2 == 1)
    {
        static NSString *CellIdentifier = @"cellID1";
        UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                            reuseIdentifier:CellIdentifier];
        }

        cell.backgroundColor = [UIColor colorWhite];

        return cell;

    } else {

        static NSString *CellIdentifier2 = @"cellID2";
        UITableViewCell *cell2 = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
        if (cell2 == nil) {
            cell2 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                            reuseIdentifier:CellIdentifier2];
        }
        cell2.backgroundColor = [UIColor clearColor];

        return cell2;
    }

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row % 2 == 1) {
        return 40.0;
    } else {
        return 2.0;
    }
}
5 голосов
/ 12 апреля 2016

Добавьте эти строки в методе cellForRowAtIndexPath UITableViewDelegate перед возвратом ячейки.

let separator = UIView(frame: CGRectMake(0, 0, cell!.bounds.size.width, 1))
separator.backgroundColor = UIColor.whiteColor()
cell.contentView.addSubview(separator)
4 голосов
/ 30 апреля 2013

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

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

- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

и затем убедитесь, что стиль таблицы - Простой, а разделитель ячеек - нет. Вы можете сделать это в самом файле XIB или в коде:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.style = UITableViewStylePlain;

Может также добавить стиль выделения ячейки к none (иначе будет выглядеть, будто вы выбираете больше, чем просто видимую часть ячейки).

cell.selectionStyle = UITableViewCellSelectionStyleNone;

Это создаст впечатление пространства между ячейками, но в то же время сохранит их в виде строк в одном разделе (что иногда является тем, что вам нужно).

4 голосов
/ 06 августа 2015

Я использовал простой и быстрый подход для этого (используя раскадровку)

  • Добавьте UITableView в свой контроллер
  • Установить стиль разделителя равным none (из инспектора атрибутов)
  • Установите высоту строки на 5 пунктов больше сверху и снизу от желаемой высоты
  • Теперь добавьте изображение в ячейку, закрепите его слева и справа, но оставьте 5-тое место (для заполнения, как на ощупь) и установите фон изображения таким же, как фон, который вы хотите для ячейки

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...