2 votes

Problème de taille de l'étiquette de l'interface utilisateur d'iOS

J'ai cherché pendant 4 heures avant d'écrire ma question, aucune des réponses que j'ai vues en ligne ne résout ce problème.

Je travaille sur une application iOS, et dans le storyboard, lorsque j'utilise un UILabel, peu importe ce que je fais, il y a toujours un padding supplémentaire en haut, ce qui me pose un gros problème car j'essaie d'avoir un design parfait au pixel près.

Je ne comprends toujours pas d'où cela vient, j'ai essayé d'utiliser du texte brut, et j'ai essayé d'attribuer des chaînes, les deux donnent toujours ce rembourrage supplémentaire :

Capture d'écran : http://imgur.com/Fldcodl

J'ai essayé de sous-classer l'étiquette avec ce qui suit :

var textInsets = UIEdgeInsets.zero {
    didSet { invalidateIntrinsicContentSize() }
}

override var bounds:CGRect {
    get {
        return super.bounds
    }
    set {
        super.bounds = newValue
        if (self.preferredMaxLayoutWidth != super.bounds.size.width) {
            self.preferredMaxLayoutWidth = super.bounds.size.width;
            self.setNeedsUpdateConstraints()
        }

    }
}

override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
    let insetRect = UIEdgeInsetsInsetRect(bounds, textInsets)
    let textRect = super.textRect(forBounds: insetRect, limitedToNumberOfLines: numberOfLines)
    let invertedInsets = UIEdgeInsets(top: -textInsets.top,
                                      left: -textInsets.left,
                                      bottom: -textInsets.bottom,
                                      right: -textInsets.right)
    return UIEdgeInsetsInsetRect(textRect, invertedInsets)
}

override func drawText(in rect: CGRect) {
    super.drawText(in: UIEdgeInsetsInsetRect(rect, textInsets))
}

Même si les valeurs de haut gauche droite bas sont fixées à 0, j'obtiens toujours cet ennuyeux rembourrage supérieur.

Une idée pour résoudre ce problème ?

Merci de votre attention !

-1voto

paulvs Points 386

En supposant que vous souhaitiez supprimer l'espace blanc autour de votre étiquette (ce qui n'est pas tout à fait clair dans votre question).

Votre étiquette a un fond jaune, la marge que vous essayez de supprimer se trouve à l'extérieur de l'étiquette, de sorte qu'aucune sous-classe ne pourra la supprimer.

La manière dont vous ajoutez l'étiquette à l'écran (dans le code ou dans l'Interface Builder, via des contraintes ou des cadres) est ce qui définit ces marges, et c'est ce que vous devez ajuster pour corriger vos marges.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X