Мой UITableView не будет прокручивать конец данных!Зачем? - PullRequest
15 голосов
/ 01 сентября 2011

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

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

Что я делаю не так?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section    {
// Return the number of rows in the section.
return 19;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...
if(indexPath.row == 0){
    cell.textLabel.text = @"";
}else if(indexPath.row == 1){
    cell.textLabel.text = @"";
}else if(indexPath.row == 2){
    cell.textLabel.text = @"";
}else if(indexPath.row == 3){
    cell.textLabel.text = @"";
}else if(indexPath.row == 4){
    cell.indentationLevel = 2;
    cell.textLabel.text = @"";
}else if(indexPath.row == 5){
    cell.indentationLevel = 2;
    cell.textLabel.text = @"";
}else if(indexPath.row == 6){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 7){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 8){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 9){
    cell.textLabel.text = @"";
}else if(indexPath.row == 10){
    cell.textLabel.text = @"";
}else if(indexPath.row == 11){
    cell.textLabel.text = @"";
}else if(indexPath.row == 12){
    cell.textLabel.text = @"";
}else if(indexPath.row == 13){
    cell.textLabel.text = @"";
}else if(indexPath.row == 14){
    cell.textLabel.text = @"";
}else if(indexPath.row == 15){
    cell.textLabel.text = @"";
}else if(indexPath.row == 16){
    cell.textLabel.text = @"";
}else if(indexPath.row == 17){
    cell.textLabel.text = @"";
}else if(indexPath.row == 18){
    cell.textLabel.text = @"";
}

return cell;
}

Ответы [ 8 ]

43 голосов
/ 01 сентября 2011

Уменьшите вашего TableView's высота .

7 голосов
/ 25 февраля 2014

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

Вы могли бы написать это:

if (indexPath.row >= 4 && indexPath.row <= 8) { // 4 and 8 inclusive
    cell.indentationLevel = 2;
}
cell.textLabel.text = @"";


Вместо этого:

if(indexPath.row == 0){
    cell.textLabel.text = @"";
}else if(indexPath.row == 1){
    cell.textLabel.text = @"";
}else if(indexPath.row == 2){
    cell.textLabel.text = @"";
}else if(indexPath.row == 3){
    cell.textLabel.text = @"";
}else if(indexPath.row == 4){
    cell.indentationLevel = 2;
    cell.textLabel.text = @"";
}else if(indexPath.row == 5){
    cell.indentationLevel = 2;
    cell.textLabel.text = @"";
}else if(indexPath.row == 6){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 7){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 8){
    cell.indentationLevel = 2;      
    cell.textLabel.text = @"";
}else if(indexPath.row == 9){
    cell.textLabel.text = @"";
}else if(indexPath.row == 10){
    cell.textLabel.text = @"";
}else if(indexPath.row == 11){
    cell.textLabel.text = @"";
}else if(indexPath.row == 12){
    cell.textLabel.text = @"";
}else if(indexPath.row == 13){
    cell.textLabel.text = @"";
}else if(indexPath.row == 14){
    cell.textLabel.text = @"";
}else if(indexPath.row == 15){
    cell.textLabel.text = @"";
}else if(indexPath.row == 16){
    cell.textLabel.text = @"";
}else if(indexPath.row == 17){
    cell.textLabel.text = @"";
}else if(indexPath.row == 18){
    cell.textLabel.text = @"";
}


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

switch (indexPath.row) {
    case 0:
        cell.textLabel.text = @"";
        break;
        ...
    case 18:
        cell.textLabel.text = @"";
    default:
        break;
}

Или даже лучше поместить все в NSArray (база данных ...) и просто просмотреть их по индексу.

6 голосов
/ 10 июня 2015

Это помогло мне:

[self.tableView setContentInset:UIEdgeInsetsMake(0,0,65,0)];
4 голосов
/ 28 июля 2014

@ EmptyStack ответ правильный. Это было альтернативное, но НЕ решение.

Даже мы можем добиться того же в раскадровке.

Выберите tableView -> в элементе управления раскадровки, нажмите на«Добавить отсутствующие ограничения».Это добавит ограничение для tableView и View.

Это помогло мне решить эту проблему.Скриншот прикреплен для справки. solution

2 голосов
/ 01 сентября 2011

Код, которым вы поделились, выглядит хорошо для меня. Вы выдвигаете контроллер представления с этим табличным представлением в стеке контроллера навигации? Я видел, как люди делали это раньше. Высота ячейки по умолчанию - 44 пикселя, а высота панели навигации - 44 пикселя. Таким образом, если вы вставите это в стек контроллера навигации, вы переместитесь назад, как описано выше. Если это так, уменьшите высоту TableView на 44 пикселя (в Интерфейсном конструкторе или в Programatics, если вы нарисовали это программно), и он должен это исправить.

1 голос
/ 13 января 2015

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

enter image description here

1 голос
/ 14 мая 2013

Вам нужно либо отрегулировать высоту вашего UITableView, либо вы можете попытаться поместить [tableView reloadData] в метод viewDidAppear (хотя, похоже, он не будет работать, если вы поместите его в viewWillAppear или viewDidLoad).

Бывший работает для меня в большинстве случаев.

0 голосов
/ 31 декабря 2018

У меня была такая же проблема.

Проверьте номер строки, которую вы не видите.

После того, как в вашем viewDidLoad добавьте этот метод:

myTableView.contentInset = UIEdgeInsets(top: 0,left: 0,bottom: yourCellHeight * rowHeight,right: 0)

Надеюсь, я вам помог

...