Ответ 1
Уменьшить таблицуView height.
Хорошо, я не знаю, почему это не работает, но я подключил 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;
}
Уменьшить таблицуView height.
Я знаю, что это старый вопрос, и это не ответ на ваш вопрос, а предложение улучшить ваш код, чтобы другие могли извлечь выгоду.
Вы могли бы написать это:
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
(базу данных...) и просто пропустить их по индексу.
Это помогло мне:
[self.tableView setContentInset:UIEdgeInsetsMake(0,0,65,0)];
@EmptyStack правильный. Это был альтернативный вариант, но НЕ решение.
Даже мы можем добиться того же в раскадровке.
Выберите tableView → из элемента управления раскадрой, нажмите "Добавить недостающие ограничения". Это добавит ограничение на tableView и View.
Это помогло мне решить эту проблему.
Экран screen_shot прилагается для справки.
Кодекс, который вы мне поделили, отлично подходит для меня. Вы нажимаете контроллер представления с этим табличным представлением на стек контроллера навигации? Я видел, как люди это делали раньше. Высота по умолчанию ячейки составляет 44 пикселя, а высота навигационной панели - 44 пикселя. Таким образом, если вы нажмете это на стеке контроллера навигации, вы прокрутите представление назад, как вы описали. Если это так, уменьшите высоту TableView на 44 px (в построителе интерфейса или программно, если вы нарисовали это программно), и это должно исправить.
Вам нужно либо отрегулировать высоту вашего UITableView, либо попытаться установить [tableView reloadData] внутри метода viewDidAppear (он, похоже, не работает, если он помещен внутри viewWillAppear или viewDidLoad, хотя).
Первое работает для меня в большинстве случаев.
Если у вас есть раскадровка или аппликатор, попробуйте это (обратите внимание: вам может потребоваться добавить некоторые ограничения, если вы хотите поддерживать пейзаж).
У меня была такая же проблема.
Проверьте номер строки, которую вы не видите.
Добавьте в свой viewDidLoad этот метод:
myTableView.contentInset = UIEdgeInsets(top: 0,left: 0,bottom: yourCellHeight * rowHeight,right: 0)
Я надеюсь, что был полезным
Я отключил автоматическую оценку, и это мне помогло.