2015-12-17 2 views
0

Я пытаюсь создать отдельную ячейку представления таблицы, которая отображает изображение, загружается из Интернета и масштабируется в соответствии с шириной устройства. Часть проблемы заключается в том, что мне нужно выяснить, как изменить размер ячейки после загрузки изображения. Другими словами, я устанавливаю высоту по умолчанию, пока изображение загружается, а после загрузки изображения я хочу изменить размер ячейки. Я знаю, что я могу настроить режим содержимого представления изображения на «аспектный размер», как только я укажу фиксированную ширину и высоту, но я не уверен, как программно устанавливать ограничения, чтобы высота могла оставаться гибкой.Как программно масштабировать UIImageView до фиксированной ширины и гибкой высоты?

Как определить эти ограничения в коде?

+0

Если я правильно понимаю, вы хотите сделать высота ячейки - высота изображения? –

+0

Не обязательно высота изображения, но такая же высота, что и UIImageView, поскольку изображение было уменьшено. – Andrew

+0

Как изменяется высота изображения? –

ответ

1

использовать этот код, чтобы изменить размер изображения после того, как изображение было загружено:

//example 
//UIImageView *yourImageView = [self imageWithImage:yourDownloadedImage scaledToWidth:CGRectGetWidth(self.view.frame)] 


- (UIImage*)imageWithImage: (UIImage*) sourceImage scaledToWidth:(float)i_width{ 
float oldWidth = sourceImage.size.width; 

if (oldWidth <= self.view.frame.size.width) { 
    return sourceImage; // remove this line if you want the image width follow your screen width 
} 
float scaleFactor = i_width/oldWidth; 
float newHeight = sourceImage.size.height * scaleFactor; 

UIGraphicsBeginImageContext(CGSizeMake(i_width, newHeight)); 
[sourceImage drawInRect:CGRectMake(0, 0, i_width, newHeight)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 

затем установите высоту вашей ячейки с этим:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; // i'm using static cell so i call this 
    return [self calculateHeightForConfiguredSizingCell:cell]; 
} 

- (CGFloat)calculateHeightForConfiguredSizingCell:(UITableViewCell *)sizingCell { 
[sizingCell layoutIfNeeded]; 

CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
return size.height; 
} 
Смежные вопросы