I am using dynamic height table cell with auto layout and inside the table cell, there are 1 dynamic height UILabel and 1 dynamic UIView which includes multiple UIImageViews.
Here is the layout: Storyboard screenshot
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
tableView.estimatedRowHeight = 500;
return UITableViewAutomaticDimension;
}
TableCell:
for(i=0; i<subviews.count; i++)
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_image.png"]];
[imgView setContentMode:UIViewContentModeScaleAspectFill];
imgView.clipsToBounds = YES;
[_viewAttaches addSubview:imgView];
imgView.translatesAutoresizingMaskIntoConstraints = NO;
if(i==0) {
NSLayoutConstraint *top = [NSLayoutConstraint
constraintWithItem:imgView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_viewAttaches
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:0.f];
[_viewAttaches addConstraint:top];
} else {
UIImageView *prevView = subviews[i-1];
NSLayoutConstraint *top = [NSLayoutConstraint
constraintWithItem:imgView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:prevView
attribute:NSLayoutAttributeBottom
multiplier:1.0f
constant:10.f];
[_viewAttaches addConstraint:top];
}
NSLayoutConstraint *leading = [NSLayoutConstraint
constraintWithItem:imgView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:_viewAttaches
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.f];
[_viewAttaches addConstraint:leading];
NSLayoutConstraint *trailing = [NSLayoutConstraint
constraintWithItem:imgView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:_viewAttaches
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:0.f];
[_viewAttaches addConstraint:trailing];
NSLayoutConstraint *height = [NSLayoutConstraint constraintWithItem:imgView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1
constant:160];
[_viewAttaches addConstraint:height];
if(i==nAttaches-1) {
NSLayoutConstraint *bottom = [NSLayoutConstraint
constraintWithItem:imgView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:_viewAttaches
attribute:NSLayoutAttributeBottom
multiplier:1.0f
constant:0.f];
[_viewAttaches addConstraint:bottom];
}
i++;
}
But I got this error:
[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:0x174288390 UILabel:0x101157580'Daniel'.height == 21 (active)>,
"<NSLayoutConstraint:0x174288cf0 UILabel:0x101158cb0'0 comments'.height == 21 (active)>",
"<NSLayoutConstraint:0x174288e80 UILabel:0x101157580'Daniel'.top == UITableViewCellContentView:0x101157130.topMargin + 2 (active)>",
"<NSLayoutConstraint:0x174288fc0 V:[UILabel:0x101157580'Daniel']-(-1)-[UILabel:0x1011469b0'I am currently in a happy...'] (active)>",
"<NSLayoutConstraint:0x1742890b0 V:[UILabel:0x1011469b0'I am currently in a happy...']-(0)-[UIView:0x101158b10] (active)>",
"<NSLayoutConstraint:0x174289240 V:[UIView:0x101158b10]-(-1)-[UILabel:0x101158cb0'0 comments'] (active)>",
"<NSLayoutConstraint:0x1742892e0 UITableViewCellContentView:0x101157130.bottomMargin == UILabel:0x101158cb0'0 comments'.bottom + 1 (active)>",
"<NSLayoutConstraint:0x170284ec0 UIView:0x101158b10.height == 330 (active)>",
"<NSLayoutConstraint:0x17428a640 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x101157130.height == 89 (active)>"
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x170284ec0 UIView:0x101158b10.height == 330 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Please help me what I am missing. Thank you in advance.