How to disable scrolling in UITableView table when the content fits on the screen

IphoneIosUitableviewScroll

Iphone Problem Overview


I have a few (grouped style) tables in my iphone app (only on part of the screen and added with Interface Builder though, not subclassed from UITableViewController) that 80% of the time are small and will fit on the screen. When the table fits on the screen, I'd like to disable scrolling, to make it a bit cleaner. But if the table goes off the screen (when rows are later added to it), I'd like to enable scrolling again (because otherwise you can't see that content.)

Is there a way to do this? I can't seem to figure it out. I do know to do:

tableView.scrollEnabled = NO;

but I'm not sure where, or if I have to calculate the table object size or something to get this to work.


Update: Here's the solution that finally worked for me:

if (table.contentSize.height < table.frame.size.height) {
   table.scrollEnabled = NO;
 }
else {
   table.scrollEnabled = YES;
 }

I run this code after calling reloadData on the table, and it calculates the right sizes and appears to work.

table.frame.size.height is the actual size of the object (you can see this in Interface Builder) displayed on the screen, whereas table.contentSize.height is the heights of: the header, the footer, and the height of every cell added together.

Iphone Solutions


Solution 1 - Iphone

I think you want to set

tableView.alwaysBounceVertical = NO;

Solution 2 - Iphone

In Swift:

tableView.alwaysBounceVertical = false

Solution 3 - Iphone

You can verify the number of visible cells using this function:

- (NSArray *)visibleCells

This method will return an array with the cells that are visible, so you can count the number of objects in this array and compare with the number of objects in your table.. if it's equal.. you can disable the scrolling using:

tableView.scrollEnabled = NO;

As @Ginny mentioned.. we would can have problems with partially visible cells, so this solution works better in this case:

tableView.scrollEnabled = (tableView.contentSize.height <= CGRectGetHeight(tableView.frame));

In case you are using autoLayout this solution do the job:

tableView.alwaysBounceVertical = NO.

Solution 4 - Iphone

So there's are multiple answers and requires a all content at once place so I'm adding this answer:

If you're using AutoLayout, by setting this only should work for you:

  • In code:

tableView.alwaysBounceVertical = false

  • or In Interface Builder:

Just find this option and untick "Bounce Vertically" option.

Here's the reference:

enter image description here

If you're not using AutoLayout:

 override func viewDidLayoutSubviews() {
    // Enable scrolling based on content height
    tableView.isScrollEnabled = tableView.contentSize.height > tableView.frame.size.height
 }

Solution 5 - Iphone

try this

[yourTableView setBounces:NO];

Solution 6 - Iphone

You can set enable/disable bounce or scrolling the tableview by selecting/deselecting these in the Scroll View area

Scroll View editing area

Solution 7 - Iphone

// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;

Solution 8 - Iphone

You can edit this in your storyboard (if you are using one). Under the table view there is a checkbox that says "Scrolling Enabled". Uncheck it and you're done.

Solution 9 - Iphone

The default height is 44.0f for a tableview cell I believe. You must be having your datasource in hand in a Array? Then just check if [array count]*44.0f goes beyond the frame bounds and if so set tableview.scrollEnabled = NO, else set it to YES. Do it where you figure the datasource out for that particular tableview.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGinnyView Question on Stackoverflow
Solution 1 - IphoneLily BallardView Answer on Stackoverflow
Solution 2 - IphoneNati Lara-DiazView Answer on Stackoverflow
Solution 3 - IphoneRoberto FerrazView Answer on Stackoverflow
Solution 4 - IphoneHemangView Answer on Stackoverflow
Solution 5 - IphonecodercatView Answer on Stackoverflow
Solution 6 - IphoneAkila WasalaView Answer on Stackoverflow
Solution 7 - IphonerjobidonView Answer on Stackoverflow
Solution 8 - IphoneericmarkmartinView Answer on Stackoverflow
Solution 9 - IphoneBourneView Answer on Stackoverflow