IPhone UITableView: как удалить интервал между разделами в таблице стиля группы?

Я создаю представление таблицы, в котором есть 10 разделов, все из которых имеют вид заголовка, но не ячейки. Короче говоря, в моем представлении таблицы будут отображаться только 10 заголовков; в любом разделе не будет ячеек. Теперь, когда я делаю это, между заголовками заголовков разделов есть пробел. Я хочу удалить это пространство. Это возможно? Можете ли вы дать мне какой-нибудь намек или поработать над этим?

Вот методы источника данных:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return 10;
}

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

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UILabel * label = [[UILabel alloc] init];
    label.backgroundColor = [UIColor grayColor];
    return label;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 44.0f;
}

Вот скриншот выхода: enter image description here

У меня есть своя сложная причина, почему я делаю это так, что я не смогу объяснить с помощью письма. Все, что я хочу сделать, - не иметь промежутков в представлениях заголовка раздела. Заранее благодарю вас.

Ответы

Ответ 1

Попробуйте это.

   self.tableView.rowHeight = 0; // in viewdidload
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; // in viewdidload

 -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.01f;
}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return <your header height>;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
return <your header view>;
}

Также есть таблица seprator как никто.

Ответ 2

Если вы возвращаете 0 в tableView:heightForFooterInSection:, чем возвращается значение по умолчанию (возможно, 10.0). Это сложно, но вы можете использовать CGFLOAT_MIN вместо 0 для удаления нижнего колонтитула.

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

Update:

Swift 3:

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

Ответ 3

Попробуйте выполнить следующий код

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0.25; // as for you need
}

вы также можете управлять с помощью метода делегата

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

Короче, вы можете управлять им двумя способами.

Ответ 4

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

или

попробуйте простой стиль.

typedef enum {
   UITableViewStylePlain,
   UITableViewStyleGrouped
} UITableViewStyle;

Ответ 5

Вы можете сделать это непосредственно в интерфейсе, вы должны установить высоту нижнего колонтитула в 1 следующим образом:

введите описание изображения здесь

Ответ 6

Измените стиль Table View с Grouped на Plain. Это решило мою проблему.

Ответ 7

Так что я не могу голосовать, но могу отправить ответ

Правильный ответ на этот счет фактически

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

Ответ 8

Вам нужно использовать метод heightForHeaderInSection. Вы также можете изменить его в зависимости от разных разделов, например. в некоторых разделах вам может потребоваться больше расстояния, а под некоторыми, вы не хотите показывать пробел. В таком случае вы можете использовать CGFLOAT_MIN, который равен 0,000001f. Приведя пример, как вы можете использовать другой раздел с разными высотами заголовков

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0 || section == 2)
    {
        return 55.0;
    }
    else
    {
        return CGFLOAT_MIN;
    }
}

Надеюсь, это поможет вам.

Ответ 9

Попробуйте использовать это:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{
   return 0;
}

Как указано в комментариях, попробуйте использовать это:

 self.tableView.rowHeight = 0;