I have a `UITableViewController` that will display a variety of custom `UITableViewCell` subclasses. Some of these classes have dynamic content that may change the size of the cell.

Some of this dynamic content is generated through `asynchronous operations`, such as downloading images, data, etc. Then the results are used to determine the correct size for the cell.

I am getting a lot of constraint warnings when the cell updates its layout. It appears to break some of the `UITableView` constraints *(i.e. The cell's height was 100 before the data finished downloading, then was updated to 250)*.

The only way I found to fix these warnings, was to add a `delegate` method to the cell's class that is triggered in the `UITableViewController` and call's `[tableView reloadData]`;

This is problematic though, as it ends up re-triggering some of the cell's asynchronous operations, etc.

**My question is, what is the best approach when you have custom `UITableViewCell` class that has dynamic content that changes the cell's size after the table initially loads and displays the cell?**

**Sample Cell Layout:**

* UILabel
* UIImage
* UICollectionView *This is only shown if objects are found for current user. It may display between 1-3 rows of the object's data (thus changing the height of the cell), or will be hidden if no object's found for user.*
* UIButton

**Here's a sample warning:**

```
[LayoutConstraints] 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. 
(
    "<NSLayoutConstraint:0x17469f2c0 V:|-(5)-[UIView:0x109431f90]   (active, names: '|':UITableViewCellContentView:0x10943fcd0 )>",
    "<NSLayoutConstraint:0x17469f590 V:[UIView:0x109431f90]-(5)-|   (active, names: '|':UITableViewCellContentView:0x10943fcd0 )>",
    "<NSLayoutConstraint:0x174699a00 V:|-(0)-[UILabel:0x102d0b8f0'Welcome!']   (active, names: '|':UIView:0x109431f90 )>",
    "<NSLayoutConstraint:0x174699e10 UILabel:0x102d0b8f0'Welcome!'.height == 32   (active)>",
    "<NSLayoutConstraint:0x17469fcc0 V:[UILabel:0x102d0b8f0'Welcome!']-(0)-[UIView:0x102d019c0]   (active)>",
    "<NSLayoutConstraint:0x17469f770 UIView:0x102d019c0.height == 1   (active)>",
    "<NSLayoutConstraint:0x17469f9a0 V:[UIView:0x102d019c0]-(0)-[UIImageView:0x102da1cb0]   (active)>",
    "<NSLayoutConstraint:0x17469fb30 UIImageView:0x102da1cb0.height == 161   (active)>",
    "<NSLayoutConstraint:0x17469f810 V:[UIImageView:0x102da1cb0]-(16)-[UILabel:0x102d14150'Optional Message']   (active)>",
    "<NSLayoutConstraint:0x174690ef0 V:[UILabel:0x102d14150'Message']-(16)-[UICollectionView:0x103a01a00]   (active)>",
    "<NSLayoutConstraint:0x174880230 V:[UICollectionView:0x103a01a00]-(16)-[UIButton:0x102d7e6a0]   (active)>",
    "<NSLayoutConstraint:0x1748801e0 UIButton:0x102d7e6a0.height == 36   (active)>",
    "<NSLayoutConstraint:0x174883890 V:[UIButton:0x102d7e6a0]-(24)-|   (active, names: '|':UIView:0x109431f90 )>",
    "<NSLayoutConstraint:0x174882850 UICollectionView:0x103a01a00.height == 220   (active)>",
    "<NSLayoutConstraint:0x174882e40 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x10943fcd0.height == 329   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x174882850 UICollectionView:0x103a01a00.height == 220   (active)>

```