2016-01-10 1 views
3

Обновление: Ссылка на этот файл Github содержит проект. Если возможно, загрузите и нажмите «Обновить», вы узнаете разницу. и г-н Zhang благодарим вас за предложение «Аспект масштаба для заполнения». это немного помогло мне.Самостоятельные ячейки с асинхронной загрузкой изображений

У меня есть табличное представление, которое загружает изображения асинхронно (с AFNetworking UIImageView Category Class). Изображения сжимаются в первый раз на видимых клетках. Как только я снова загружу или прокручиваю op и вниз, изображения регулируются в соответствии с его размером.

В принципе, у меня будет другой размер изображений. Какая ширина должна быть ширина ячейки, высота может быть что-нибудь

Реализовано все необходимые шаги для selfsizing (собственно autolayout ограничения и соответствующие методы делегата)

//my tableview setup  
self.tblTest?.estimatedRowHeight = 1000.0 //i've tried with all possible guesses and 
//tried with delegate also 
self.tblTest?.rowHeight = UITableViewAutomaticDimension 

Я добавил сдерживающие, как показано ниже:

enter image description here

в моей испытательной камере.

func setUpImage(url:NSURL){ 
    //tried with another function also without NSURLRequest 
    self.imvTest?.setImageWithURLRequest(NSURLRequest(URL: url), 
             placeholderImage: UIImage(named: "store_placeholder"), 
             success: { (requset, response, image) -> Void in 
     self.imvTest?.image = image 
     print(image.size) 

     }, failure: { (error) -> Void in 

      self.imvTest?.image = nil 
    }) 
} 

Результат

enter image description here

Ожидаемое

enter image description here

Как я могу предотвратить изображение выдавливание в первый раз ??

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

Пожалуйста, предложите мне то, что у меня пропало без вести, и любые приоритеты контента и т. Д., ??

+0

Вы пытались установить режим контента Aspect Scale Заполнить изображение? – Zhang

+0

Да @ Zhang Я пробовал. Я отправлю проект в git hub в ближайшее время – Akshay

ответ

0

То, что, я считаю, происходит, состоит в том, что ячейка выкладывается с исходным размером содержимого. Затем асинхронно появляется новое изображение и устанавливается. Обычно вы устанавливаете данные для ячейки в cellForRowAtIndexPath:, что происходит до компоновки ячейки. Однако, когда изображение поступает асинхронно, макет уже произошел, поэтому уже слишком поздно.

Когда новое изображение приходит, данные изменились, так что вы должны сказать TableView, чтобы перезагрузить данные.

Вместо того, чтобы перезагружать настольный просмотр в целом, однако, вы можете указать reload an individual cell. Это, конечно же, будет намного более реалистичным, чем перезагрузка всего вида таблицы.

+0

С помощью этого метода, когда содержимое ячейки будет установлено, я должен перезагрузить всю ячейку, чтобы перезагрузить явно. Поэтому я должен перезагрузить параллельно вместе с tablview прямо !? – Akshay

1

Try вызова

tableView.beginUpdates() 
tableView.endUpdates() 

после установки изображения в закрытии успеха

Или попробуйте tableView.reloadRowsAtIndexPaths с indexPath клетки после установки изображения

+1

Я тоже пробовал эти два ... Это было катастрофой в исполнении. – Akshay

+0

Вы реализовали оценочную диаграммуHeightForRowAtIndexPath? – juanjo

+0

Да, я воспользовался. – Akshay