Найти высоту пустого пространства в UITableView - PullRequest
3 голосов
/ 10 октября 2011

В моем UITableView мне нужно расположить UIView в нижнем колонтитуле таблицы и за пределами экрана. Например, функция «Push to refresh» (например, приложение Twitter) находится в начале таблицы и за пределами экрана, мне нужно то же самое, но внизу.

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

Так что мне нужно добавить пустую ячейку (пользовательскую ячейку) в мою таблицу, чтобы заполнить пустое пространство между последней ячейкой и нижней частью экрана, как я могу это сделать? Как я могу узнать высоту пустого пространства?

Большое спасибо за помощь.

Ответы [ 3 ]

8 голосов
/ 10 октября 2011

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

Теперь единственное решение, о котором я могу подумать сейчас, - это вручную вычислить высоту вашего контента. Для этого, я думаю, вы можете использовать трюк и просто позвонить


CGRect lastRowFrame = [tableView rectForRowAtIndexPath: <b>last_row_index_path</b>];

Как сказано в документации, это даст вам кадр для последней строки, и с этим вы можете вычислить разницу между frame.size.height и последней строкой. Примерно так:


CGFloat emptySpaceHeight = tableView.frame.size.height - (lastRowFrame.origin.y + lastRowFrame.size.height);

Это будет пустое пространство, которое необходимо добавить к представлению нижнего колонтитула.

Да, и последний трюк для получения этого эффекта: убедитесь, что вы используете tableView.contentInset, чтобы установить нижнюю вставку в минус высоту сообщения "Push to refresh" Это заставит просмотр таблицы отскочить и отдохнуть с сообщением вне экрана.

Сейчас я не могу придумать лучшего способа добиться того, чего ты хочешь. Надеюсь, это поможет.

0 голосов
/ 09 мая 2018

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

    if indexPath == (lastIndexPath) {
        var currentCellsHeight: CGFloat = 0
        let minimumFooterCellHeight = 50 // Whatever you want the minimum to be

        for visibleCell in tableView.visibleCells {
            currentCellsHeight += visibleCell.frame.height
        }

        if let footerCell = tableView.cellForRow(at: indexPath) {
            currentCellsHeight -= footerCell.frame.height
        }
        if self.view.frame.height - currentCellsHeight < minimumFooterCellHeight {
            return minimumFooterCellHeight
        } else {
            return self.view.frame.height - currentCellsHeight
        }
    }
0 голосов
/ 23 марта 2018

Swift версия

        lastRowFrame = tableView.rectForRow(at: indexPath)
        let emptySpaceHeight = tableView.frame.size.height - (lastRowFrame.origin.y + lastRowFrame.size.height)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...