UITableView пробелы при использовании динамической высоты строки - PullRequest
3 голосов
/ 05 января 2010

У меня есть UITableView высотой 400px, который я хочу заполнить 10 или 11 пользовательскими UITableViewCells в зависимости от отображаемых данных. Проблема состоит в том, что в зависимости от того, как я устанавливаю высоту каждой строки, используя свой текущий метод, между ячейками или под нижней ячейкой есть промежутки. Я предполагаю, что это связано с округлением.

Этот код помещает разбросанные пробелы в 1 пиксель в конце некоторых ячеек:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        return (tableView.frame.size.height/11);
    }
    else {
        return (tableView.frame.size.height/10);
    }
}  

И этот код с возвратами, приведенными к NSIntegers, объединяет все ячейки вместе, но оставляет несколько пикселей ниже нижней ячейки:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        return (NSInteger)(tableView.frame.size.height/11);
    }
    else {
        return (NSInteger)(tableView.frame.size.height/10);
    }
}  

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

Ответы [ 3 ]

1 голос
/ 05 января 2010

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

Я думаю, у вас есть два варианта:

(1) Установите высоту строки так, чтобы нижний ряд находился наполовину за пределами экрана. Пользователь будет прокручивать вверх, чтобы увидеть последнюю строку, и между строками не будет очевидного разрыва. В конце будет мертвое пространство, но пользователи ожидают этого в таблице.

(2) Используйте верхний и нижний колонтитулы разделов, чтобы визуально заполнить пространство сверху и снизу одного раздела, чтобы расположить его так, как вам бы хотелось. Я уверен, что вы можете использовать пустой прозрачный вид произвольной высоты, чтобы центрировать секцию так, как вам хотелось бы.

1 голос
/ 07 января 2010

Если вам на самом деле не нужны ячейки с разной высотой, почему бы вам просто не изменить высоту UITableView в зависимости от isWednesdaySchedule? Это должно исправить проблемы, которые вы упомянули.

0 голосов
/ 05 января 2010

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
    if (isWednesdaySchedule) {
        if (indexPath.row < 10) {
            return (NSInteger)(tableView.frame.size.height/11);
        } else {
            CGFloat bottomPadding = tableView.frame.size.height ((NSInteger)(tableView.frame.size.height/11)*11;
            return (NSInteger)(tableView.frame.size.height/11 + bottomPadding);
        }
    } else {
        if (indexPath.row < 9) {
            return (NSInteger)(tableView.frame.size.height/10);
        } else {
            CGFloat bottomPadding = tableView.frame.size.height ((NSInteger)(tableView.frame.size.height/10)*10;
            return (NSInteger)(tableView.frame.size.height/10 + bottomPadding);
        }
    }
}

Код не был проверен, но я думаю, вы поняли.

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