我使用自动布局的动态高度表格单元格,在表格单元格内部,有1个动态高度UILabel和1个动态UIView,其中包括多个UIImageView。
这是布局:情节提要屏幕截图
- (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.
请帮助我,我错过了什么。提前谢谢你。
你所做的工作几乎是正确的保持这一点以下的变化来解决这个问题
1. 在 UI 表视图单元格
中更改视图层次结构
-> Timeline TableView
'-> postecell
'-> content view
'-> myView // I added this `UIview` & in this view add all you cell components
'-> Img User
'-> lbl Name
: :
: :
< code>myView约束:
> < li >顶部、底部、领导、培训到监督。 < blockquote > < p >编辑-删除该行下面的内容
注意:确保单元格中的每个组件都必须有顶底和固定高度,关系=
和动态标签具有关系≥
。
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;
}
编辑
查看层次结构
故事板
输出:
我有一个带有一堆单元格的表视图(自定义单元格,它只有它的内容视图)。 在 中,我正在向自定义单元格的content视图添加一个预定义的UIView(它有几个子视图)。我之前为UIView及其子视图设置了所有约束。 最后但并非最不重要的是,我为我的自定义单元格的内容视图(superview)和UIView设置了垂直和水平约束,UIView是在(subview)之前添加的。 约束字符串如下所示: 不幸
对于我的表视图单元格的动态高度,我从此链接中引用。在 UITableView 中使用自动布局进行动态单元格布局 这是我的表视图数据源和委托方法的代码 我有 2 个问题: > 我的问题是我在线路附近收到错误 在和。 为什么我必须在单元格中同时写入标签文本“和? 另外,我是否缺少实现单元动态高度所需的任何内容?
我有一个UIScrollView,嵌套在一个内容视图中,它有两个嵌套的子视图,一个具有已知高度的常规UIView,以及一个具有动态高度的容器视图,具体取决于内容。就像这样: 视图如下所示: 我的约束设置如下: 滚动视图被限制在其超级视图(即视图)的尾缘、前缘、顶端和下边缘 内容视图被约束到其超级视图(即滚动视图)的尾部、前导、顶部和底部边缘。它还具有与主视图(即视图)相等的宽度约束,因此滚动视图的
我使用界面生成器创建了一个自定义的 TableView 单元格。这是它的样子: 对于描述标签,我需要它来自动换行,所以我这样设置它: 在我的设置页面视图控制器中,我重写了以下表视图方法: 生成的页面如下所示: 如您所见,第一个tableview单元格的描述标签没有自动换行。它就这么断了。我如何使它包装? 此外,我想动态调整表格视图单元格的高度。我试图改变高度,使其看起来更怪异: 如何为1行描述标签
我有一个具有动态高度的表视图与其他具有动态高度的UI组件一起在表视图中 数据,模型在这里.. 单元格子视图。。 这是内部tableView及其约束! 构造器
问题内容: 我有一个UILabel,一个UIView在情节提要中并排包含其他子视图。UIView应该紧靠UILabel的右边缘(跟踪约束为1),但我还需要UIlabel(左侧的UIlabel)将其宽度设置为等于其内容大小,除非它达到最大宽度。视觉上: |标签文字| | UIViewWithSubviews | 我需要以下约束: 1)标签应明智地调整宽度大小,除非达到最大大小,并且高度也是动态的,这