5

Swift/Objective C - Simple Way to Dynamically change TableView Cell height

In my table view cell break first line and third line, every label will dynamic

enter image description here

Shrikant Tanwade
  • 1,391
  • 12
  • 21
  • Possible duplicate of [Using Auto Layout in UITableView for dynamic cell layouts & variable row heights](http://stackoverflow.com/questions/18746929/using-auto-layout-in-uitableview-for-dynamic-cell-layouts-variable-row-heights) – Shamas S Mar 04 '16 at 08:57
  • 1
    This answer have each and every step mention by images and it is easy to understand every one..... – Shrikant Tanwade Mar 07 '16 at 07:00

2 Answers2

25

Add Constraints to Image View (top, Leading, trailing, Height)

Don't Add Bottom Constraints

enter image description here

Add Constraints to Each label (top, Leading, trailing, Bottom)

enter image description here

Add Constraints to last label (top, Leading, trailing, Bottom)

enter image description here

Set each label

Number of Line = 0

Line Breaks mode = word warp

enter image description here

Table View Datasource and Delegate Methods

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("PropertyListCell", forIndexPath: indexPath) as UITableViewCell!

    imgProperty = viewBg.viewWithTag(111) as! RemoteImageView
    lblPropertyName = viewBg.viewWithTag(112) as! UILabel
    lblPrice = viewBg.viewWithTag(113) as! UILabel
    lblAddress = viewBg.viewWithTag(114) as! UILabel
    lblAreaPerSquare = viewBg.viewWithTag(115) as! UILabel

    imgProperty.imageURL = NSURL(string: "Image Url")
    lblPropertyName.text="Jai Maharashtra Apartment"
    lblPrice.text="Rs. 900 - 10000"
    lblAddress.text="411041,Maharashtra Sadan, Pune, Maharashtra , India" // just address changed. 
    lblAreaPerSquare.text="500 Square Meter"

    cell.selectionStyle = UITableViewCellSelectionStyle.None
    return cell
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    return UITableViewAutomaticDimension
}

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    return 44.0
}

Now All labels are Dynamic

enter image description here

Community
  • 1
  • 1
Shrikant Tanwade
  • 1,391
  • 12
  • 21
0

Swift - 3.0

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
     var height:CGFloat = CGFloat()
     if indexPath.row == 0 {
     height = 80
    }
    else if indexPath.row == 1 {
     height = self.view.frame.size.height - 80 - 44 - 64
     print(height)
    }
    return height
   }
Zalak Patel
  • 1,937
  • 3
  • 26
  • 44
Vishal Vaghasiya
  • 4,618
  • 3
  • 29
  • 40