我在处理 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];
}
答案 0 :(得分:1)
想一想:
constant
属性。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