7
votes

Rendre uiimage ajuster dans uiimageview inside uIView

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>

 Entrez la description de l'image ici 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)]
        }
    }
}


10 commentaires

Ê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 et définissez le contenuMode? Vaut une photo depuis sa seule bouge d'une ligne de code.


@Nsgangster - Nope.


Essayez d'imprimer imageview.frame ? 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))


4 Réponses :


1
votes

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.

Deux solutions: h1>
  • Créez un modèle de cellule, insérez votre imageView et donnez-lui des contraintes dans le storyboard. LI>
  • Vérifiez les contraintes que vous avez ajoutées à l'image d'image par défaut. LI> ul>

    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)
    


1 commentaires

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.



0
votes

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)]


0 commentaires

0
votes
  • Créez une cellule personnalisée avec la conception que vous avez besoin.

  • Faites les contraintes en haut et en bas à gauche et réglez la largeur de la UiImageView.

  • Ajoutez le XIB personnalisé avec la tableView.

    J'espère que cela vous aidera ...


0 commentaires

0
votes

Ajouter quelque chose comme ceci: xxx


1 commentaires

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.