iOS Utilisation de la taille du contenu intrinsèque


Exemple

Lors de la création d'une sous-classe UIView, la taille du contenu intrinsèque permet d'éviter de définir des contraintes de hauteur et de largeur codées en dur

un aperçu de base sur la façon dont une classe peut utiliser cette

class ImageView: UIView {
    var image: UIImage {
        didSet {
            invalidateIntrinsicContentSize()
        }
    }
    // omitting initializers
    // convenience init(image: UIImage)

    override func intrinsicContentSize() -> CGSize {
        return CGSize(width: image.size.width, height: image.size.height)
    }
}

Si vous souhaitez uniquement fournir une taille intrinsèquement, vous pouvez fournir la valeur UIViewNoIntrinsicMetric pour la valeur que vous souhaitez ignorer.

 override func intrinsicContentSize() -> CGSize {
     return CGSize(width: UIViewNoIntrinsicMetric, height: image.size.width)   
 }

Avantages lors de l'utilisation avec AutoLayout et Interface Builder

On pourrait prendre cette ImageView (ou UIImageView) et définir l'alignement horizontal au centre X de superview et l'alignement vertical au centre Y de superview.

UIImage CentréVoir

Le constructeur de l'interface se plaindra à ce stade en vous donnant l'avertissement suivant:

Avertissement de hauteur et de largeur de l'interface

C'est ici que la Placeholder Intrinsic Size entre en jeu.

En entrant dans le panneau de l'inspecteur Taille et dans la liste déroulante Taille intrinsèque, vous pouvez basculer cette valeur de Par défaut à Espace réservé.

Emplacement de la taille intrinsèque de l'espace réservé

et maintenant, le générateur d'interface supprimera les avertissements précédents et vous pourrez utiliser cette taille pour avoir des vues de taille dynamique définies dans le générateur d'interface.