iOS更新TableViewCell约束

时间:2015-08-13 03:47:48

标签: ios uitableview autolayout constraints tableviewcell

我在处理 TableViewCell 中的约束时遇到问题。我在单元格中有一个 imageview ,我想更新图像的约束。例如,宽度约束的默认值为120.如果imageUrl不为空,则宽度应为120,否则为0宽度。

我使用下面的代码将其更改为0并且完美运行。在我滚动TableView之后,由于约束将其锁定在0宽度,我的大部分图像都丢失了。我想将它更新回120宽度,但它似乎不起作用。任何帮助表示赞赏。

    CGFloat cellImageWidth = 120.0;

    NSDictionary *mainDictionary = @{@"cellImage":cellImage};
    NSArray *zeroWidth = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:[cellImage(%f)]", 0.0]
                                                                             options:0
                                                                             metrics:nil
                                                                               views:mainDictionary];

    NSArray *normalWidth = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:[cellImage(%f)]", cellImageWidth]
                                                                 options:0
                                                                 metrics:nil
                                                                   views:mainDictionary];


    if(![[imgArr objectAtIndex:indexPath.row] isEqualToString:@""]){
        [cellImage sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", imageInbox, [imgArr objectAtIndex:indexPath.row]]] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];


        cellImage.hidden = NO;

        [cellImage removeConstraints:zeroWidth];
        [cellImage addConstraints:normalWidth];
        [cellImage updateConstraints];

    }else{
        cellImage.hidden = YES;

        [cellImage removeConstraints:normalWidth];
        [cellImage addConstraints:zeroWidth];
        [cellImage updateConstraints];

    }

2 个答案:

答案 0 :(得分:1)

想一想:

  1. 为什么不更新使用过的约束?设置约束一次,如果要更新更改constant属性。
  2. 你真的需要改变约束到零吗?其他约束取决于它?
  3. 覆盖prepareForReuse。当UITableViewCell准备重用以显示UITableView中另一个对象的信息时会调用此方法,这在滚动发生时偶然发生。解决方案就像将以下代码插入我的UITableViewCell子类一样简单:-(void) prepareForReuse { [self setNeedsUpdateConstraints]; }

答案 1 :(得分:0)

尝试使用它。

NSLayoutConstraint *myConstraint =[NSLayoutConstraint 
                 constraintWithItem:Your_Image
                 attribute:NSLayoutAttributeWidth
                 relatedBy:NSLayoutRelationGreaterThanOrEqual
                 toItem:nil
                 attribute:NSLayoutAttributeWidth
                 multiplier:1
                 constant:120];//120 is the width you want