У меня есть пользовательский UITableViewCell. Он содержит метки и UIImageView сверху вниз. Я добавил ограничения для меток и UIImageViews. Итак, я могу использовать systemLayoutSizeFittingSize: UILayoutFittingCompressedSize, чтобы вычислить высоту ячейки, соответствующую содержимому. Но изображение в UIImageView загружается из сети с помощью SDWebImage. Сначала я могу установить некоторые ограничения для UIImageView. Когда изображение загружено, я должен изменить ограничение UIImageView, чтобы оно соответствовало его размеру. Но иногда возникает ошибка. Иногда это нормально:
* Ошибка утверждения в - [NSLayoutConstraint _setSymbolicConstant: constant:], /SourceCache/Foundation_Sim/Foundation-1142.14/Layout.subproj/NSLayoutConstraint.m:585 2015-04-01 19: 57: 44.537 HiPDA [3760: 63583]
* Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Константа не конечна! Это незаконно. константа: nan '
*** Стек вызовов первого вызова:
(
0 CoreFoundation 0x00000001113cfa75 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x0000000111068bb7 objc_exception_throw + 45
2 CoreFoundation 0x00000001113cf8da + [NSException Raise: format: arguments:] + 106
3 Foundation 0x000000010ef0cb6f - [NSAssertionHandler handleFailureInMethod: object: file: lineNumber: description:] + 195
4 Foundation 0x000000010ee87c7d - [NSLayoutConstraint _setSymbolicConstant: constant:] + 149
Код такой:
__weak typeof(self) weakSelf = self;
__weak typeof(UIImageView *) weakImgView=imgView;
[imgView sd_setImageWithURL:[NSURL URLWithString:[dic objectForKey:THREADLISTDETAILIMAGE]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
CGFloat width=image.size.width>maxWidth?maxWidth:image.size.width;
NSLayoutConstraint *imgW1=[NSLayoutConstraint constraintWithItem:weakImgView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:0.0 constant:width];
[weakSelf.contentView addConstraint:imgW1];
NSLayoutConstraint *imgH1=[NSLayoutConstraint constraintWithItem:weakImgView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:0.0 constant:width*image.size.height/image.size.width];
[weakSelf.contentView addConstraint:imgH1];
[weakSelf needsUpdateConstraints];
[weakSelf layoutIfNeeded];
[weakSelf layoutSubviews];
}];
И если изображение загружено полностью, представление таблицы не обновляется. Я вижу, что изображение выходит за пределы размера ячейки. Как я могу это решить?