ios - sesion - Las celdas de vista de colección no cargan las imágenes correctamente
porque las fotos de mi iphone no cargan (2)
En primer lugar, use el botón Depurar jerarquía de vistas para verificar anomalías en las celdas de la tabla en tiempo de ejecución.
A continuación, establezca un punto de interrupción en la creación de la celda e inspeccione el UIImage que está a punto de establecer en la celda y asegúrese de que el tamaño sea correcto. Si asigna la imagen que ha descargado a una variable local, probablemente también pueda visualizarla rápidamente, para ver si se ve bien.
Entonces, si todo parece sensato, verifique que su código de diseño automático sea robusto.
Compruebe quitando la descarga de imágenes de la situación. Yo haría esto:
- Elimine la configuración de la imagen, pero establezca el fondo de la imagen en UIColor.Red o algo así y compruebe que todos estén bien diseñados como poco más que los UIViews normales.
- Incruste una imagen en el paquete de la aplicación como PNG y configúrela en lugar de la imagen descargada. De nuevo, mira cómo se renderiza.
- Pruebe con una imagen de diferentes tamaños en el paquete de la aplicación y vuelva a verificar (si corresponde, tal vez todas sus imágenes tengan el mismo tamaño)
Si todo se ve bien, entonces sabrá que se trata de la descarga o el diseño de esas imágenes de servidor.
Estoy desarrollando una aplicación de iOS que carga publicaciones de un servidor en un UICollectionView. La celda de vista de colección incluye un UIImageView que se fija en la parte inferior de la celda.
Cada vez que inicio la aplicación y la vista de colección se carga, todas las imágenes no se cargan correctamente, pero para la última imagen, que son las dimensiones correctas. Todas las celdas se están formateando de la misma manera.
He intentado una multitud de soluciones, pero hasta ahora nada ha funcionado.
Lo que sospecho que está sucediendo es que las imágenes no han terminado de cargarse antes de establecerse en UIImageView de cada celda (excepto la última en este caso). Esto no parece posible, ya que las células se vuelven a cargar después de obtener una respuesta exitosa.
Este es mi código para esa función en particular (usando 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)
}
}
}
Toda la ayuda es apreciada.
Editar: A continuación se muestran las restricciones actuales en el UIImageView
Editar 2: Aquí está el código para formatear las celdas
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
}
Actualización: Usando @ Michael''s Advice, he encontrado que las imágenes de la Celda se están cargando correctamente.
pero que la altura de la celda está siendo misteriosamente cortada por 50px ...
Tamaño de celda del editor de guiones gráficos
Tamaño de celda en tiempo de ejecución
Este parece ser el problema, pero aún no he encontrado una solución.
Actualización: Con dos horas restantes en la recompensa, decidí adjudicarlo a @Michael porque su respuesta me ayudó a seguir investigando mi problema, que aún está en curso.
Cambie 15: 4Ratio a una altura constante (80px), y establezca heightForRowAtIndexPath en una altura constante (250px)