2016-03-15 3 views
1

Я создал UITableView программно, но он имеет дополнительное пространство ниже (29 пикселей, если быть точным).iOS: дополнительное пространство внизу UITableView

Это, как я инициализировать таблицу:

UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; 
[tableView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.contentView addSubview:tableView]; 
self.alertsTableView = tableView; 

Ниже приведены ограничения:

@"V:|-10-[_alertsTableView(0)]-5-[_optionsLabel]", 
    @"H:|-15-[_alertsTableView]-15-|", 

Я попытался установить вид колонтитула к нулю и возвращает ноль для его высоты:

[self.tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]]; 

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

Я динамически изменяю его высоту, исходя из содержания:

- (void)updateHeight:(CGFloat)height { 
    if (self.tableView.superview) { 
     NSLayoutConstraint *heightConstraint; 
     for (NSLayoutConstraint *constraint in self.tableView.superview.constraints) { 
      if (constraint.firstAttribute == NSLayoutAttributeHeight) { 
       heightConstraint = constraint; 
       break; 
      } 
     } 
     heightConstraint.constant = height; 
    } 
} 

Я также установил setAutomaticallyAdjustsScrollViewInsets в NO. И this - это конечный результат. Между ячейкой и пустым пространством существует разделитель, но нижняя часть не является ячейкой.

+1

вы также можете установить footerview используя. table.tableFooterView = [uiview new]; –

+0

Попробуйте кнопку «Иерархия просмотра отладки» - может помочь вам увидеть, какой UIView занимает пространство. – siburb

+0

Можете ли вы поделиться кодом, как вы вычисляете 'height'. Также я бы рекомендовал изменить подход, как вы обновляете ограничение. Вместо выполнения всех ограничений вы можете иметь ivar для ограничения высоты на первом месте и можете напрямую обновить его значение в методе «updateHeight:». – Gandalf

ответ

8

Вы можете использовать contentInset компенсировать 29px дополнительный нижний край:

tableView.contentInset = UIEdgeInsetsMake(0, 0, -29, 0); 
Смежные вопросы