2015-05-17 3 views
0

Надеюсь, вы поможете мне решить эту проблему.Настольные ячейки с динамической высотой

У меня есть вид таблицы, ячейки имеют изображение, а высота ячейки зависит от изображения. Я использую SDWebImage для управления загрузкой изображений. Для того, чтобы получить изображение, я использую эту фразу в cellForRowAtIndexPath:

[cell.imageView func_crossdissolveFromURL:imageURL]; 

Функция func_crossdissolveFromURL является следующим:

- (void)func_crossdissolveFromURL:(NSString *)urlString { 
    [self.activityIndicator stopAnimating]; 
    [self.downloadOperation cancel]; 

    if (!urlString) { 
     return; 
    } 

    UIImage *memImage = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:urlString]; 
    if (memImage) { 
     [self _crossdisolve:memImage cacheType:SDImageCacheTypeMemory]; 
     return; 
    } 

    [self.activityIndicator startAnimating]; 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
    __weak UIImageView *wself = self; 
    id<SDWebImageOperation> operation = [manager downloadWithURL:[NSURL URLWithString:urlString] 
                options:SDWebImageAllowInvalidSSLCertificates 
                progress:nil 
                completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { 
                 [self.activityIndicator stopAnimating]; 
                 if (!wself) return; 
                 dispatch_main_sync_safe(^{ 
                  if (!wself || !image) return; 
                  [self _crossdisolve:image cacheType:cacheType]; 
                 }); 
                }]; 
    self.downloadOperation = operation; 
} 

и функции называется _crossdissolve называется близко к концу заключается в следующем:

- (void)_crossdisolve:(UIImage *)image cacheType:(SDImageCacheType)cacheType { 
    CGFloat duration = (cacheType == SDImageCacheTypeMemory) ? 0 : 0.25f; 
    [UIView transitionWithView:self 
        duration:duration 
        options:UIViewAnimationOptionTransitionCrossDissolve 
       animations:^{ 
        self.image = image; 
       } 
       completion:^(BOOL finished) { 
        [self setNeedsLayout]; 
       }]; 
} 

Итак, как я могу иметь каждую ячейку с высотой содержимого изображения? Заранее спасибо.

ответ

1

Вам нужно две вещи:

  1. Установите высоту ячейки, чтобы быть автоматическим: self.tableView.rowHeight = UITableViewAutomaticDimension;
  2. Определите высоту ячейки с помощью Автокомпоновка

Чтобы изменить высоту ячейки после он отображается, вы можете перезагрузить ячейку.

+0

Это не работает для меня, если я добавляю self.tableView.rowHeight = UITableViewAutomaticDimension; и я не использую heightForRowAtIndexPath, результат тот же. Может быть, я не очень хорошо делаю шаг №2, как это сделать? –

+0

Не уверен, что хорошо, но вам нужно убедиться, по крайней мере, высота ячейки определена однозначно, используя ваши ограничения. Вы также можете добавить ориентировочную высоту ('self.tableView.estimatedRowHeight = 87.0f;'). –

+0

Вместо этого у меня есть функция valuHeightForRowAtIndexPath, и там я возвращаю UITableViewAutomaticDimension, но он не работает хорошо. –

Смежные вопросы