Подтвердить что ты не робот

Получить высоту UITableView без полос прокрутки

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

Я пробовал [tableView sizeThatFits:CGSizeZero], но это возвращает 0x0 CGSize.

4b9b3361

Ответ 1

Попробуйте метод contentSize, который наследуется от суперкласса UITableViews, UIScrollView. Однако вы можете обнаружить, что contentSize возвращает неправильное или устаревшее значение, поэтому сначала вы должны сначала вызвать layoutIfNeeded, чтобы пересчитать раскладку таблиц.

- (CGFloat)tableViewHeight
{
   [tableView layoutIfNeeded];
   return [tableView contentSize].height;
}

Ответ 2

Обязательный Swift 3.0 и 2,2 ответ.

var tableViewHeight: CGFloat {
    tableView.layoutIfNeeded()

    return tableView.contentSize.height
}

Ответ 3

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

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

- (CGSize)com_lohika_contentSize
{
    CGRect theFrame = self.frame;
    self.frame = CGRectZero;
    self.frame = theFrame;
    [self layoutIfNeeded];
    return [self contentSize];
} 

Ответ 4

Попробуйте передать другой CGSize параметр вместо CGSizeZero. Метод sizeThatFits: использует этот параметр для вычисления его результата. Попробуйте передать в self.view.size из любого класса, который делает этот вызов.