设置单元格高度给我错误
Setting cells height gives me error
我在 UITableViewCell
中有一个 UIView
。我正在尝试使用动画更改 view
的高度。这是我所做的:
self.myViewConstraint.constant = 100; // Coming from 0
[UIView animateWithDuration:0.3f animations:^{
[self.view layoutIfNeeded];
}];
唯一的问题是,它在 tableView
中。所以这就是我为 heightForRow...
:
所做的
return self.myViewConstraint.constant == 0 ? 74 : 174;
现在我需要更新 tableView
,所以我插入 animateWithDuration
:
[self.tableView beginUpdates];
[self.tableView endUpdates];
因为我在 cell
中还有其他东西,所以 constraints
在 cells
高度动画时变得混乱。如何在不弄乱约束的情况下更新 cells
高度? (我想要 cells
高度动画。)
这是我收到的警告。 (一切正常,但我只想删除警告。)
编辑 我稍微修改了一下,现在出现这个错误:
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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f8d62d15670 V:[tagResultTableView:0x7f8d62d901a0(107)]>",
"<NSLayoutConstraint:0x7f8d62cea010 tagResultTableView:0x7f8d62d901a0.top == UITableViewCellContentView:0x7f8d62d8fd50.topMargin - 8>",
"<NSLayoutConstraint:0x7f8d62cf0760 V:[tagResultTableView:0x7f8d62d901a0]-(8)-[UILabel:0x7f8d62d2e2e0'Limit: Up to 5 tags']>",
"<NSLayoutConstraint:0x7f8d62cf0800 UILabel:0x7f8d62d2e2e0'Limit: Up to 5 tags'.bottom == UITableViewCellContentView:0x7f8d62d8fd50.bottomMargin>",
"<NSLayoutConstraint:0x7f8d62f726d0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8d62d8fd50(32)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f8d62d15670 V:[tagResultTableView:0x7f8d62d901a0(107)]>
这是一个例子。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return self.myViewConstraint.constant == 0 ? 74 : 174;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseID];
if (!cell) {
cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ReuseID];
}
if (self.myViewConstraint.constant != 0) {
[cell doAnimation];
}
return cell;
}
你能做的是
创建自定义 UITableViewCell
并为 'CustomView' 的高度 contentView 创建出口
@属性 (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint;
并设置所有约束。
在viewDidLoad
中设置如下
tableView.rowHeight = UITableViewAutomaticDimension;
tableView.estimatedRowHeight = N; // N is some estimated height of your cells
通过更改 updateContraints
方法 heightConstraint.constant = newHeight
中的 IBOutlet
常量来设置高度动画,只要您需要更新 [=17] 的高度=], 你可以有
[UIView animateWithDuration:animationDuration animations: ^{
[self.contentView layoutIfNeeded] // This will call to updateContraints you should calculate the new height inside that method
}];
终于打电话给
[tableView beginUpdates];
[tableView endUpdates];
我在 UITableViewCell
中有一个 UIView
。我正在尝试使用动画更改 view
的高度。这是我所做的:
self.myViewConstraint.constant = 100; // Coming from 0
[UIView animateWithDuration:0.3f animations:^{
[self.view layoutIfNeeded];
}];
唯一的问题是,它在 tableView
中。所以这就是我为 heightForRow...
:
return self.myViewConstraint.constant == 0 ? 74 : 174;
现在我需要更新 tableView
,所以我插入 animateWithDuration
:
[self.tableView beginUpdates];
[self.tableView endUpdates];
因为我在 cell
中还有其他东西,所以 constraints
在 cells
高度动画时变得混乱。如何在不弄乱约束的情况下更新 cells
高度? (我想要 cells
高度动画。)
这是我收到的警告。 (一切正常,但我只想删除警告。)
编辑 我稍微修改了一下,现在出现这个错误:
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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f8d62d15670 V:[tagResultTableView:0x7f8d62d901a0(107)]>",
"<NSLayoutConstraint:0x7f8d62cea010 tagResultTableView:0x7f8d62d901a0.top == UITableViewCellContentView:0x7f8d62d8fd50.topMargin - 8>",
"<NSLayoutConstraint:0x7f8d62cf0760 V:[tagResultTableView:0x7f8d62d901a0]-(8)-[UILabel:0x7f8d62d2e2e0'Limit: Up to 5 tags']>",
"<NSLayoutConstraint:0x7f8d62cf0800 UILabel:0x7f8d62d2e2e0'Limit: Up to 5 tags'.bottom == UITableViewCellContentView:0x7f8d62d8fd50.bottomMargin>",
"<NSLayoutConstraint:0x7f8d62f726d0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8d62d8fd50(32)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f8d62d15670 V:[tagResultTableView:0x7f8d62d901a0(107)]>
这是一个例子。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return self.myViewConstraint.constant == 0 ? 74 : 174;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseID];
if (!cell) {
cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ReuseID];
}
if (self.myViewConstraint.constant != 0) {
[cell doAnimation];
}
return cell;
}
你能做的是
创建自定义
UITableViewCell
并为 'CustomView' 的高度 contentView 创建出口 @属性 (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint; 并设置所有约束。在
viewDidLoad
中设置如下tableView.rowHeight = UITableViewAutomaticDimension;
tableView.estimatedRowHeight = N; // N is some estimated height of your cells
通过更改
updateContraints
方法heightConstraint.constant = newHeight
中的IBOutlet
常量来设置高度动画,只要您需要更新 [=17] 的高度=], 你可以有[UIView animateWithDuration:animationDuration animations: ^{ [self.contentView layoutIfNeeded] // This will call to updateContraints you should calculate the new height inside that method }];
终于打电话给
[tableView beginUpdates]; [tableView endUpdates];