My UITableView won't scroll down through the end of the data! Why?

拟墨画扇 提交于 2019-11-30 11:29:12

Decrease your tableView's height.

I know it's an old question and this is not an answer to your question, but a suggestion to improve your code so others can benefit.

You could write this:

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


Instead of this:

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 = @"";
}


And if you happen to have different text for each case you could either use:

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

Or even better to put everything inside an NSArray (database...) and just loop through them by the index.

aleksie3006

This helped me:

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

@EmptyStack answer is right.That was a alternate but NOT the Solution.

Even we can achieve the same in storyboard.

Select tableView --> from the storyboard control click on 'add Missing constraints'. That will add the constraint to tableView and View.

That helped me to resolve this issue. A screen_shot attached for reference.

The code that you shared looks fine to me. Are you pushing view controller with this tableview on navigation controller stack ? I have seen people do that before. Default height of cell is 44px and height of navigation bar is 44px as well. So, if you push this on navigation controller stack you scroll view snaps back like you have described. If that is the case reduce height of TableView by 44 px ( in Interface builder or Programatically if you drew this programatically) and it should fix it.

You need to either adjust the height of you UITableView or you can try to put [tableView reloadData] inside viewDidAppear method (it doesn't seem to work if put inside viewWillAppear or viewDidLoad though).

The former works for me in most cases.

If you have a storyboard or nib try this (note, you might have to add some constraints if you want to support landscape).

I had the same problem.

Check the number of the row that you can't see.

After in your viewDidLoad, add this method:

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

I hope I have been helpful

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!