82 votes

IOS - supprimer TOUT le remplissage de UITextView

Il existe de nombreux exemples de SO permettant de supprimer le remplissage à gauche d'un UITextView.

Comment perdre les marges/encadrements dans UITextView ?

Cependant, je dois également supprimer le rembourrage droit.

J'ai essayé...

[tv setContentInset: UIEdgeInsetsMake(-4,-8,-8,-X)];//where X is any integer

et à peu près toutes les autres permutations des deux dernières valeurs pour supprimer le rembourrage, mais rien ne semble fonctionner. J'ai également essayé

[tv sizeToFit];
[tv setTextAlignment:[NSTextAlignmentRight]];

Le texte suivant dans la fenêtre de texte indique "00"

enter image description here

233voto

dbart Points 4133

Bien qu'il s'agisse d'iOS 7 uniquement, une solution extrêmement propre consiste à définir les textContainerInsets du textView comme suit :

[textView setTextContainerInset:UIEdgeInsetsZero];
textView.textContainer.lineFragmentPadding = 0; // to remove left padding

Cette opération a pour effet de supprimer toutes les zones de remplissage (insets) autour du texte à l'intérieur de l'affichage du texte. Si votre objectif de déploiement est iOS 7+, c'est la meilleure solution jusqu'à présent.

47voto

samwize Points 4144

Pour supprimer complètement tout le rembourrage, l'option lineFragmentPadding doit être prise en compte.

let padding = textView.textContainer.lineFragmentPadding
textView.textContainerInset =  UIEdgeInsets(top: 0, left: -padding, bottom: 0, right: -padding)

En lineFragmentPadding La valeur par défaut est 5, et se situe au début et à la fin du rectangle du fragment.

Certaines réponses suggèrent la mise en place lineFragmentPadding à 0. Cependant, comme indiqué dans la documentation, il n'est pas conçu pour exprimer les marges de texte. Il ne faut donc pas le mettre à 0.

23voto

Abhishek Biswas Points 167

Version Swift 4 pour l'OA

self.tDescription.textContainerInset = UIEdgeInsets.zero
self.tDescription.textContainer.lineFragmentPadding = 0

10voto

Irtaza fayaz Points 181

Pour iOS 11.7

Le code suivant a fonctionné pour moi :

    textView.textContainer.lineFragmentPadding = CGFloat(0.0)
    textView.textContainerInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    textView.contentInset = UIEdgeInsets(top: 0,left: 0,bottom: 0,right: 0)

De l'officiel Documentation :

textContainerInset : Il est possible de définir les tailles du conteneur de texte et de l'affichage, ainsi que le comportement de redimensionnement, de manière à ce que l'affichage de la page d'accueil soit le même pour tous. inset ne peut pas être maintenue exactement, bien que le système de texte s'efforce de maintenir l'intégrité du texte. inset dans la mesure du possible.

En tout état de cause, le textContainerOrigin et la taille du conteneur de texte font foi quant à l'emplacement du conteneur de texte dans la vue. Le texte lui-même peut faire l'objet d'un encart supplémentaire, à l'intérieur du conteneur de texte, spécifié par l'attribut lineFragmentPadding méthode de NSTextContainer .

7voto

Mohamed A.Karim Points 386

Essayez de sous-classer l'UITextView et de surcharger la méthode suivante :

    - (id)styleString
{
    return [[super styleString] stringByAppendingString:@"; line-height: 1.6em;margin-right: 30px; margin-left: 0px; margin-top: 0px;"];
}

Apparemment, vous pouvez modifier la marge gauche, la marge supérieure et tout ce que vous voulez ;)

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