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

Мой UITableView не будет прокручиваться вниз по концу данных! Зачем?

Хорошо, я не знаю, почему это не работает, но я подключил 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;
}
4b9b3361

Ответ 1

Уменьшить таблицуView height.

Ответ 2

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

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

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 (базу данных...) и просто пропустить их по индексу.

Ответ 3

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

[self.tableView setContentInset:UIEdgeInsetsMake(0,0,65,0)];

Ответ 4

Ответ на

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

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

enter image description here

Ответ 8

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

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

Добавьте в свой viewDidLoad этот метод:

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

Я надеюсь, что был полезным

Ответ 9

Я отключил автоматическую оценку, и это мне помогло.

Disable Auto estimate