O-mkar O-mkar - 1 year ago 108
Swift Question

How to increase the single row height without reloading UITableView or individual cells [Swift]?

I want to expand the row height and show the content inside.
I show my content in view I want when I tap on a cell it should expand like showed in the image below but without reloading the UITableview.


What I have tried till now.

1) I tried expanding the view inside but it didn't work

2) I tried adding rowAtIndex it was becoming complicated

3) I tried changing change row height and scroll at index it worked fine but I don't want like that. (bad thing I have to reload the table view)

But i got many answers but it didn't address my issue as my data in the array(data source) is continuously updated if I refresh at specific index the data in the array at the index might be different it might show the wrong output.


I mean I have an array of struct I keep on updating it in background once the data change and reload the table view but if the i reload the row at index and if the data in an array is already changed it might show duplication correct? so i want to just change the height of the row without doing any reload.

Problem with reloading is

while expanding the data might change in the array. so i already created a view and all the info is preloaded once i tap the height of the cell should change from 45 to 76 and once i tap different cell again from last cell 76 to 45 and this cell 45 to 76.

Answer Source

Table height can only be changed through delegates there is no other way to do it i will show you a simple way to do it.

Declare variable

var selectedIndex = NSIndexPath()

Inside didSelectRowAtIndexPath reload selected cell

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        selectedIndex = indexPath
        tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)


Inside heightForRowAtIndexPath return size

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath == selectedIndex {

        return 100 //Size you want to increase to
    return 50 // Default Size