UITableviewCell 动态高度 - 自动布局问题
TableviewCell dynamic height - auto layout issues
我需要实现像 instagram 这样的新闻提要,但我在限制方面遇到了一些麻烦。
我有一个 tableView 单元格:图像视图、标签 1、标签 2、视图 1 和视图 2,垂直顺序如下:
我需要达到以下条件:
- 我的图片是方形的。
- 标签 1(黑色的)最多有 5 行
- 标签 2(红色的)没有最大行数
- 视图 1 的高度为 30px
- 视图 2 的高度为 35px
我的约束是:
图片:
- 尾随 space 到超级视图
- 引导space到superview
- 置顶space到superview
- botton space to label 1 with constant=8
- height = 320 with priority=999(在运行时我将此值更改为视图的宽度)
- 内容拥抱 - 垂直 = 751,水平 = 751
- 内容压缩 - 垂直 = 1000,水平 = 751
标签 1:
- 尾随 space 到具有常量=-20 和优先级=999 的超级视图
- 以常量=20
引导space到超级视图
- 身高 >=20 优先级= 750
- bottom space to label2 with constant=8
- 内容拥抱 - 垂直 = 1000,水平 =752
- 内容压缩 - 垂直 = 1000,水平 = 751
标签 2:
- 尾随 space 到具有常量=-20 和优先级=999 的超级视图
- 以常量=20
引导space到超级视图
- 身高 >=20 优先级= 750
- bottom space 到 view1 with constant=8
- 内容拥抱 - 垂直 = 1000,水平 =752
- 内容压缩 - 垂直 = 1000,水平 = 751
视图 1:
- 尾随 space 到超级视图
- 引导space到superview
- 按钮 space 到视图 2
- 身高=30
- 内容拥抱 - 垂直 = 1000,水平 =250
- 内容压缩 - 垂直 = 1000,水平 = 750
视图 2:
- 尾随 space 到超级视图
- 引导space到superview
- 按钮 space 到超级视图
- 身高=35
- 内容拥抱 - 垂直 = 1000,水平 =750
- 内容压缩 - 垂直 = 1000,水平 = 750
在运行期间,我收到了几个关于约束的警告。它不能满足我所有的限制。
"<NSLayoutConstraint:0x7fec35712d60 V:[UIView:0x7fec357391e0(30)]>",
"<NSLayoutConstraint:0x7fec3570a8f0 V:[UIView:0x7fec357432a0(35)]>",
"<NSLayoutConstraint:0x7fec350d17b0 V:|-(0)-[UIImageView:0x7fec35711340] (Names: '|':UITableViewCellContentView:0x7fec35744f30 )>",
"<NSLayoutConstraint:0x7fec350bf830 V:[UIImageView:0x7fec35711340]-(8)-[TimelineLabel:0x7fec3570a980'Usura']>",
"<NSLayoutConstraint:0x7fec350bc7e0 V:[TimelineLabel:0x7fec3570a980'Usura']-(8)-[UILabel:0x7fec350ddb40'Produtos: BATOM: MAC, SOM...']>",
"<NSLayoutConstraint:0x7fec35701f20 V:[UILabel:0x7fec350ddb40'Produtos: BATOM: MAC, SOM...']-(8)-[UIView:0x7fec357391e0]>",
"<NSLayoutConstraint:0x7fec350e90c0 V:[UIView:0x7fec357391e0]-(0)-[UIView:0x7fec357432a0]>",
"<NSLayoutConstraint:0x7fec350e9110 UIView:0x7fec357432a0.bottom == UITableViewCellContentView:0x7fec35744f30.bottom>",
"<NSLayoutConstraint:0x7fec357085c0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fec35744f30(0)]>"
Will attempt to recover by breaking constraint
NSLayoutConstraint:0x7fec3570a8f0 V:[UIView:0x7fec357432a0(35)];
对于我的 tableView 中的每个单元格,打破不同的常量。
我尝试了很多解决方案,但 none 有效。
求助!请!
警告是关于动态 TableViewCell 中牢不可破的约束。但是随着您的布局在执行时间发生变化,您必须让您的视图在没有严格 "pixel accuracy" 约束的情况下自行调整。
您需要将 1000 个优先级约束中的一些设置为 999。这将使 Xcode 对某些需要打破约束的情况感到满意。然而,在大多数情况下,您的所有约束都将得到满足。 =D
我需要实现像 instagram 这样的新闻提要,但我在限制方面遇到了一些麻烦。
我有一个 tableView 单元格:图像视图、标签 1、标签 2、视图 1 和视图 2,垂直顺序如下:
我需要达到以下条件:
- 我的图片是方形的。
- 标签 1(黑色的)最多有 5 行
- 标签 2(红色的)没有最大行数
- 视图 1 的高度为 30px
- 视图 2 的高度为 35px
我的约束是:
图片:
- 尾随 space 到超级视图
- 引导space到superview
- 置顶space到superview
- botton space to label 1 with constant=8
- height = 320 with priority=999(在运行时我将此值更改为视图的宽度)
- 内容拥抱 - 垂直 = 751,水平 = 751
- 内容压缩 - 垂直 = 1000,水平 = 751
标签 1:
- 尾随 space 到具有常量=-20 和优先级=999 的超级视图
- 以常量=20 引导space到超级视图
- 身高 >=20 优先级= 750
- bottom space to label2 with constant=8
- 内容拥抱 - 垂直 = 1000,水平 =752
- 内容压缩 - 垂直 = 1000,水平 = 751
标签 2:
- 尾随 space 到具有常量=-20 和优先级=999 的超级视图
- 以常量=20 引导space到超级视图
- 身高 >=20 优先级= 750
- bottom space 到 view1 with constant=8
- 内容拥抱 - 垂直 = 1000,水平 =752
- 内容压缩 - 垂直 = 1000,水平 = 751
视图 1:
- 尾随 space 到超级视图
- 引导space到superview
- 按钮 space 到视图 2
- 身高=30
- 内容拥抱 - 垂直 = 1000,水平 =250
- 内容压缩 - 垂直 = 1000,水平 = 750
视图 2:
- 尾随 space 到超级视图
- 引导space到superview
- 按钮 space 到超级视图
- 身高=35
- 内容拥抱 - 垂直 = 1000,水平 =750
- 内容压缩 - 垂直 = 1000,水平 = 750
在运行期间,我收到了几个关于约束的警告。它不能满足我所有的限制。
"<NSLayoutConstraint:0x7fec35712d60 V:[UIView:0x7fec357391e0(30)]>",
"<NSLayoutConstraint:0x7fec3570a8f0 V:[UIView:0x7fec357432a0(35)]>",
"<NSLayoutConstraint:0x7fec350d17b0 V:|-(0)-[UIImageView:0x7fec35711340] (Names: '|':UITableViewCellContentView:0x7fec35744f30 )>",
"<NSLayoutConstraint:0x7fec350bf830 V:[UIImageView:0x7fec35711340]-(8)-[TimelineLabel:0x7fec3570a980'Usura']>",
"<NSLayoutConstraint:0x7fec350bc7e0 V:[TimelineLabel:0x7fec3570a980'Usura']-(8)-[UILabel:0x7fec350ddb40'Produtos: BATOM: MAC, SOM...']>",
"<NSLayoutConstraint:0x7fec35701f20 V:[UILabel:0x7fec350ddb40'Produtos: BATOM: MAC, SOM...']-(8)-[UIView:0x7fec357391e0]>",
"<NSLayoutConstraint:0x7fec350e90c0 V:[UIView:0x7fec357391e0]-(0)-[UIView:0x7fec357432a0]>",
"<NSLayoutConstraint:0x7fec350e9110 UIView:0x7fec357432a0.bottom == UITableViewCellContentView:0x7fec35744f30.bottom>",
"<NSLayoutConstraint:0x7fec357085c0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7fec35744f30(0)]>"
Will attempt to recover by breaking constraint
NSLayoutConstraint:0x7fec3570a8f0 V:[UIView:0x7fec357432a0(35)];
对于我的 tableView 中的每个单元格,打破不同的常量。
我尝试了很多解决方案,但 none 有效。
求助!请!
警告是关于动态 TableViewCell 中牢不可破的约束。但是随着您的布局在执行时间发生变化,您必须让您的视图在没有严格 "pixel accuracy" 约束的情况下自行调整。
您需要将 1000 个优先级约束中的一些设置为 999。这将使 Xcode 对某些需要打破约束的情况感到满意。然而,在大多数情况下,您的所有约束都将得到满足。 =D