Setting cells height gives me error

ぐ巨炮叔叔 提交于 2019-12-24 12:35:03

问题


I have a UIView in a UITableViewCell. I'm trying to change the height of the view with an animation. Here is what I did:

self.myViewConstraint.constant = 100; // Coming from 0
[UIView animateWithDuration:0.3f animations:^{
        [self.view layoutIfNeeded];        
    }];

The only thing is, it's in a tableView. So here's what I did for the heightForRow...:

return self.myViewConstraint.constant == 0 ? 74 : 174;

Now I need to update the tableView, so I inserted in animateWithDuration:

[self.tableView beginUpdates];
[self.tableView endUpdates];

Because I have other things inside the the cell, so the constraints get messed up while the cells height is animating. How can I update the cells height without getting the constraints messed up? (I want the cells height to animate.)

Here is the warning I get. (Everything works fine, but I just want to remove the warning.)

Edit I changed it a bit, and I now get this error:

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)]>

回答1:


Here is an example.

- (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;
}



回答2:


What you can do is

  1. Create a custom UITableViewCell and create an outlet for the height contentView of for the 'CustomView' @property (weak, nonatomic) IBOutlet NSLayoutConstraint *heightConstraint; and set all your constraints.

  2. In viewDidLoad set the following

    tableView.rowHeight = UITableViewAutomaticDimension; tableView.estimatedRowHeight = N; // N is some estimated height of your cells

  3. Animate the height by changing the IBOutlet constant in updateContraints method heightConstraint.constant = newHeight to do this, whenever you need to update the height of your UIView, you can have

    [UIView animateWithDuration:animationDuration animations: ^{ [self.contentView layoutIfNeeded] // This will call to updateContraints you should calculate the new height inside that method }];

  4. Finally call to

    [tableView beginUpdates]; [tableView endUpdates];



来源:https://stackoverflow.com/questions/31127922/setting-cells-height-gives-me-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!