swift - Haz que UIImage encaje en UIImageView dentro de UIView
uitableview (4)
El problema es si usa la vista de imagen predeterminada que no contiene ninguna restricción. Cuando cargue una imagen más grande, se mostrará a tamaño completo.
Dos soluciones:
- Crea un modelo de celda, inserta tu imageView y dale restricciones en el guión gráfico.
- Compruebe las restricciones que ha agregado a la vista de imagen predeterminada.
Por ejemplo:
let horizontalConstraint = NSLayoutConstraint(item: newView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)
newView.translatesAutoresizingMaskIntoConstraints = false
cellView.addConstraint(horizontalConstraint)
Tengo problemas para que las imágenes encajen, con la relación de aspecto correcta dentro de su UIImageView.
Todas las imágenes insertadas inicialmente desde un plist en datos básicos encajan con la relación de aspecto correcta, pero a medida que se agregan usando la aplicación (de la biblioteca existente de imágenes), las imágenes en dos de tres vistas parecen más grandes que la vista en sí misma, por lo que que solo se muestra la esquina superior izquierda de la foto. En la captura de pantalla siguiente, la fila superior de la tabla muestra una imagen añadida a través del plist y las dos filas siguientes (MY RECORDS) muestran fotos que no están confinadas a la vista.
Las celdas de la vista anterior se crean de la forma habitual y luego se configuran en su propio método, donde se definen sus propiedades.
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
self.configureCell(cell, indexPath: indexPath)
return cell
}
func configureCell(cell: UITableViewCell, indexPath: NSIndexPath)
{
let record = fetchedResultsController.objectAtIndexPath(indexPath) as! Record
cell.textLabel!.text = record.subject
cell.detailTextLabel!.text = record.shortDetails
if let imageArray = imagesForRecord(record)
{
if imageArray.count > 0
{
cell.imageView?.contentMode = .ScaleAspectFit
cell.imageView?.clipsToBounds = true
cell.imageView?.image = imageArray[Int(record.featureImageIndex)]
}
}
}
Pero la imagen no se escala, ni está recortada dentro de los límites de imageView. Las imágenes que se cargaron inicialmente, como el oso, no requirieron que se configurara contentMode o clipsToBounds.
Tengo el mismo problema en un controlador de vista diferente (llámalo VC2), pero esta vista se define usando el guión gráfico. Tengo una vista de UIImage que está restringida a todos los lados de una UIView que tiene restricciones de tamaño fijo. La vista de UIImage está configurada en Ajuste de aspecto, pero cuando configuro una imagen desde la biblioteca de dispositivos aparece como las imágenes de arriba: la relación de aspecto es correcta, pero solo se muestra la esquina superior de la imagen.
En otra vista, tengo casi el mismo diseño de guión gráfico que VC2, pero aquí funciona como se esperaba. No veo ninguna diferencia en las restricciones, propiedades y se están utilizando las mismas fotos (de la biblioteca).
No veo diferencias, y no me puedo imaginar cómo depurar desde aquí. Sin duda, estoy malinterpretando algo bastante simple sobre Aspect Fit o cómo aplicarlo.
Intenta agregar este cell.imageView? .layer.masksToBounds = true. Puede ayudarte
cell.imageView?.contentMode = .ScaleAspectFit
cell.imageView?.clipsToBounds = false
cell.imageView?.layer.masksToBounds = true
cell.imageView?.image = imageArray[Int(record.featureImageIndex)]
Tal vez agregue algo como esto:
class func imageWithImage(image: UIImage, scaledToSize newSize: CGSize) -> UIImage {
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
Cree una celda personalizada con el diseño que necesita.
Haz las restricciones en la parte superior e inferior izquierda y establece el ancho para la vista de UIImage.
Agregue el Xib personalizado con TableView.
Espero que esto ayude...