使用CentreY约束设置子视图的动画

时间:2015-06-14 06:44:22

标签: objective-c uitableview uiviewanimation

我有一个带有两个UILabel和一个UISwitch的UITableViewCell。标签是多线的并且彼此叠置。 UISwitch垂直居中。当我关闭开关时,我隐藏了其中一个标签,并且行的高度发生了变化。这会导致开关在我调用时跳转:

[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

这是我的tableviewcell类实现:

 - (void)setBounds:(CGRect)bounds
{
  [super setBounds:bounds];

  self.contentView.frame = self.bounds;
}

- (void)setUpView{

    self.numberLabel.text = [NSString stringWithFormat:@"Quote number %ld",    [self.cellData[@"rowNumber"] integerValue]];
    [self.controlSwitch setOn:[self.cellData[@"checked"] boolValue]];

    [UIView animateWithDuration:0.5 animations:^{
    if ([self.controlSwitch isOn]) {
        self.quoteLabel.text = self.cellData[@"quote"];
        self.quoteLabel.hidden = NO;
        self.bottomConst.constant = 10;
    }else{
        self.quoteLabel.text = @"";
        self.quoteLabel.hidden = YES;
        self.bottomConst.constant = 0;
    }
 }];


}

- (void)layoutSubviews
{
  [super layoutSubviews];

  self.selectionStyle = UITableViewCellSelectionStyleNone;
  [self.contentView updateConstraintsIfNeeded];
  [self.contentView layoutIfNeeded];

  self.numberLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.numberLabel.frame);
  self.quoteLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.quoteLabel.frame);
}


- (IBAction)removeQuote:(id)sender {
   [self.delegate updateCell:self];
}

UITableViewCell上的约束设置如下所示。

enter image description here

当开关打开时,我只是取消隐藏引号标签并设置文本。 Here是关于它的样子的链接。这是默认行为还是有一种方法可以在行动画时控制开关的移动?

1 个答案:

答案 0 :(得分:0)

试试这个:

...
[self.contentView updateConstraintsIfNeeded];

[UIView beginAnimations:nil context:nil];
[self.contentView layoutIfNeeded];
[UIView commitAnimations];
...