J'ai beaucoup de difficulté à obtenir des images à installer, avec le rapport de format correct dans leur UIImageView.
Toutes les images insérées initialement à partir d'un plat dans les données de base correspondent au bon rapport qualité-format, mais comme les images sont ajouté à l'aide de l'application (à partir de la bibliothèque d'images existante), les images de deux des trois vues apparaissent plus grandes que la vue elle-même - de sorte que juste le coin supérieur gauche de la photo est affiché. Dans la capture d'écran ci-dessous, la rangée supérieure du tableau indique une image ajoutée via le plat et les deux lignes suivantes (mes enregistrements) affichent des photos qui ne sont pas limitées à la vue. P>
Les cellules de la vue ci-dessus sont créées de manière habituelle, puis configurées dans sa propre méthode, où ses propriétés sont définies. P>
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)] } } }
4 Réponses :
Le problème est que si vous utilisez l'image d'image par défaut qu'il ne contient aucune contrainte. Lorsque vous chargez une image plus grande, il affichera la taille réelle.
Par exemple: P>
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)
Je ne pense pas qu'un modèle de cellule résout le problème, conformément à la question initiale, le problème existe également dans un modèle de storyboard. J'ai ajouté plus de détails à la question pour le montrer plus clairement. Je le ferais volontiers si la question de l'autre vue de scénario a été résolue. J'ai essayé de vérifier les contraintes ajoutées à la valeur d'image par défaut comme vous le suggérez (mais avec NEWVIEW = Cell.ImageView et Cellview = Self.View), et les images changent de taille et agissent très bien. Je ne sais pas ce que cela me dit.
essayer d'ajouter cette cellule.ImageView? .layer.maskstobounds = true. Il peut vous aider
cell.imageView?.contentMode = .ScaleAspectFit cell.imageView?.clipsToBounds = false cell.imageView?.layer.masksToBounds = true cell.imageView?.image = imageArray[Int(record.featureImageIndex)]
Créez une cellule personnalisée avec la conception que vous avez besoin. p> li>
Faites les contraintes en haut et en bas à gauche et réglez la largeur de la UiImageView. P> li>
Ajoutez le XIB personnalisé avec la tableView. p> li> ul>
J'espère que cela vous aidera ... P>
Ajouter quelque chose comme ceci:
Bien que ce ne soit pas la réponse que j'espérais - j'espérais que l'aspect ajusté a été une fonction intégrée - vous (et les autres commentaires et réponses) m'ont montré que malgré ce que Apple tente de faire avec des mises en page par défaut, il est difficile d'éviter Spécifier exactement ce dont vous avez besoin après tout. Merci.
Êtes-vous sûr de vos paramètres .ContentMode et .Clipstobounds à droite imageView? UitaireViewCell a une propriété ImageView par défaut utilisé pour afficher les cellules de base. En outre, dans quelle fonction appelez-vous ces deux?
Dans le storyboard, l'identifiant de la cellule est «cellule», qui est ensuite utilisé dans la méthode de la déléguée de la TableView.CellfornorTindexpath. Cette cellule est ensuite transmise à une méthode Configurecell dans laquelle le contentMode et les clipstobounds sont ajoutés (ainsi que le texte et l'image) avant d'être renvoyés par la méthode du délégué.
Utilisez .uiviewContentMode.scalalleaspectivement. Vous ne pouvez pas redimensionner l'image comme ce que vous attendez maintenant. I.E Prenez WhatsApp, ils ont le même problème ce que vous êtes confronté. Donc, ils collent simplement avec .Calalleaspectpectpectivement pour toutes les images.
Affichez le code où vous définissez l'image et le mode de contenu - tout cela
Pouvez-vous s'il vous plaît ajouter un code de votre méthode celltfornorTindIndexpath et Configurecell.
Que se passe-t-il si vous définissez l'image, puis appelle
clipstobounds code> et définissez le contenuMode? Vaut une photo depuis sa seule bouge d'une ligne de code.
@Nsgangster - Nope.
Essayez d'imprimer
imageview.frame code>? Est-ce qu'il montre 180x140 sur certaines images comme vos contraintes l'avoir? Ne résoudrait pas le problème mais vous feriez vous diriger dans la bonne direction. Soit exclure quelque chose qui se passe dans le cadre de l'imageView ou que vous connaissez son bug causé par autre chose.
C'est bizarre, le cadre est: facultatif ((0,0, 0,0, 0,0, 0,0))
Désolé - cela a dû être une charge de page vierge. Le cadre sur la vue de la table principale est le suivant: Facultatif ((16.0, 0,0, 132.0, 101.5))