SELF SIZING CELLS IN IOS7

Tanuj Kumar

Total Post:134

Points:940
Posted by  Tanuj Kumar
iPhone  Ios  Ios 7 
 3381  View(s)
Ratings:
Rate this:
With the release of iOS8 I have designed my table view with cells taking advantage of self sizing cells. But I need my tables to work in iOS7 as well. How do I do that? Is there a way to check whether self sizing cells is supported or not in runtime, or can I implement some table delegate methods in my controller which will not be called in iOS7?

If I try my table with self sizing cells in iOS7 I get errors on the console like this:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7fc912d1d5a0 V:|-(>=11)-[UILabel:0x7fc912d13900]   (Names: '|':UITableViewCellContentView:0x7fc912d13400 )>",
    "<NSLayoutConstraint:0x7fc912d1d6b0 V:[UILabel:0x7fc912d13900]-(11)-|   (Names: '|':UITableViewCellContentView:0x7fc912d13400 )>",
    "<NSAutoresizingMaskLayoutConstraint:0x7fc912d24d80 h=--& v=--& V:[UITableViewCellContentView:0x7fc912d13400(0.5)]>"
)
  1. john rob

    Post:108

    Points:756
    Re: self sizing cells in iOS7

    This is the solution I have found thus far, but it requires checking for specific version number rather than capability. You only set UITableViewAutomaticDimension if you have iOS8 or higher as version:

    override func viewDidLoad() {

        if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 {
            self.tableView.estimatedRowHeight = 80
            self.tableView.rowHeight = UITableViewAutomaticDimension
        }
    }
    For iOS7 you need to calculate a height for each cell. But if you are on iOS8 you can return UITableViewAutomaticDimension as the height:

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 {
            return UITableViewAutomaticDimension
        }
        else {
            return 50 // Or whatever calculated value you need for cell height
        }
    }

Answer

NEWSLETTER

Enter your email address here always to be updated. We promise not to spam!