我正在使用具有自动布局的动态高度表格单元格,在表格单元格内部,有1个动态高度UILabel和1个动态UIView,其中包含多个UIImageViews。
这是布局: 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++;
}
但我收到了这个错误:
[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.
请帮助我,我错过了什么。提前谢谢。
答案 0 :(得分:0)
您完成的工作几乎是正确的,请保持以下更改以解决此问题
1。更改UITableviewCell
内的视图层次结构&amp;在下面创建如下
-> Timeline TableView
'-> postecell
'-> content view
'-> myView // I added this `UIview` & in this view add all you cell components
'-> Img User
'-> lbl Name
: :
: :
myView
约束:
编辑 - 删除以下行
- 身高与关系
醇>greater than equal to (≥)
注意:请确保单元格中的每个组件必须具有关系=
的顶部底部和固定高度,并且动态标签具有≥
的关系。
2。您的身高代码应该是这样的
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 250; // it is the height of cell which is in the storyboard after creation of custom cell.
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
修改
查看层次结构
<强>故事板强>
<强>输出:强>