Я разрабатываю приложение iOS, которое загружает сообщения с сервера в UICollectionView. Ячейка просмотра коллекции включает UIImageView, который фиксируется в нижней части ячейки.
Всякий раз, когда я запускаю приложение и загружается представление коллекции, все изображения не загружаются правильно, а для последнего изображения, которые являются правильными размерами. Все ячейки форматируются одинаково.
Я пробовал множество решений, но ничего до сих пор не работал.
То, что я подозреваю, заключается в том, что изображения не закончили загрузку до того, как они были установлены в UIImageView каждой ячейки (кроме последнего в этом случае). Это не представляется возможным, хотя по мере перезагрузки ячеек после получения успешного ответа.
Это мой код для этой конкретной функции (с использованием Alamofire)
func getAllPosts(){
let url = "\(Constants.baseURL)/posts/"
let parameters = ["user_id": "\(userProfile!.getId())"]
Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON)
.validate(contentType: ["application/json"])
.responseString { response in
switch response.result {
case .Success:
var postsArray = Array<[String: AnyObject]>()
do {
let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: NSJSONReadingOptions.MutableContainers)
for post in json as! [AnyObject] {
postsArray.append(post as! [String: AnyObject])
}
//invert array of posts so that latest load first!
postsArray = postsArray.reverse()
} catch {
}
//convert json to Post objects and reload the view
self.initialisePosts(postsArray)
self.collectionView?.reloadData()
case .Failure(let error):
print(error)
}
}
}
Вся помощь приветствуется.
Изменить: Ниже приведены текущие ограничения для UIImageView
Изменить 2: Вот код форматирования ячеек
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
// get a reference to our postcell with no image
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifiers[0], forIndexPath: indexPath) as! PostCell
guard let _: Post? = posts[indexPath.row] else {
return cell
}
return configurePostCell(cell, post: posts[indexPath.row])!
}
func configurePostCell(cell: UICollectionViewCell, post: Post) -> PostCell?{
if let cell = cell as? PostCell {
cell.author.text = post.user_name
cell.date.text = formatter.stringFromDate(post.pub_date!)
cell.desc.text = post.desc
cell.layer.cornerRadius = 5 //set corner radius here
cell.advertImage.image = post.advert?.advert_image
return cell
}
return nil
}
Обновление: с помощью @Michael Advice Я обнаружил, что изображения соты загружаются правильно.
, но высота ячейки таинственно обрезается на 50 пикселей.
Размер ячейки редактора раскадровки
Размер ячейки во время выполнения
Это, кажется, проблема, но я еще не нашел решение.
Обновление: через два часа после награды я решил присудить его @Michael, потому что его ответ помог мне продолжить исследование моей проблемы, которая продолжается.