Les vues leftView et rightView d'un UITextField sur iOS7 sont vraiment proches de la bordure du champ de texte.
Comment puis-je ajouter un rembourrage (horizontal) à ces éléments?
J'ai essayé de modifier le cadre, mais cela n'a pas fonctionné
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
Veuillez noter que je ne suis pas intéressé par l'ajout de remplissage au texte du champ de texte, comme celui-ci Définir le remplissage pour UITextField avec UITextBorderStyleNone
ios
objective-c
uitextfield
sous zéro
la source
la source
Réponses:
Je travaillais juste dessus moi-même et j'ai utilisé cette solution:
Cela déplacera l'image de la droite de 10 au lieu d'avoir l'image pressée contre le bord dans iOS 7.
De plus, cela faisait partie d'une sous-classe de
UITextField
, qui peut être créée par:UITextField
au lieu de la valeur par défautNSObject
Ajouter une nouvelle méthode nommée
- (id)initWithCoder:(NSCoder*)coder
pour définir l'imageVous devrez peut-être importer
#import <QuartzCore/QuartzCore.h>
Ajoutez la
rightViewRectForBounds
méthode ci-dessusDans Interface Builder, cliquez sur le TextField que vous souhaitez sous-classe et remplacez l'attribut de classe par le nom de cette nouvelle sous-classe
la source
Une solution beaucoup plus simple, qui profite de
contentMode
:Dans Swift 3,
la source
Le moyen le plus simple est d'ajouter un UIView à leftView / righView et d'ajouter un ImageView à UIView, d'ajuster l'origine de ImageView dans UIView où vous le souhaitez, cela a fonctionné pour moi comme un charme. Il ne nécessite que quelques lignes de code
la source
UIViewContentMode
ça ne marche pas mais cette réponse fonctionne comme un charme!Cela fonctionne très bien pour Swift:
la source
Cela fonctionne pour moi
Que cela vous aide.
la source
J'aime cette solution car elle résout le problème avec une seule ligne de code
Remarque: .. ou 2 si vous envisagez d'inclure QuartzCore une ligne :)
la source
La meilleure façon de faire est simplement de créer une classe en utilisant la sous-classe de UITextField et dans le fichier .m
en faisant cela, allez dans votre storyboard ou xib et cliquez sur l'inspecteur d'identité et remplacez UITextfield par votre propre option "CustomTextField" dans la classe.
Remarque: Si vous donnez simplement un remplissage avec une mise en page automatique pour le champ de texte, votre application ne s'exécutera pas et affichera uniquement un écran vide.
la source
Au lieu de manipuler imageView ou image, nous pouvons remplacer une méthode fournie par apple pour rightView.
et de la même manière, nous pouvons remplacer ci-dessous func pour la vue de gauche.
la source
J'ai trouvé ça quelque part ...
la source
Swift 5
Vous voudrez:
UITextField
UIView
plus grand que votre imageUITextField.rightView
la source
Voici une solution:
la source
Créez une classe UITextField personnalisée et utilisez cette classe au lieu de UITextField. Override - (CGRect) textRectForBounds: (CGRect) limites pour définir le rect dont vous avez besoin
Exemple
la source
L'exemple ci-dessous concerne l'ajout d'un remplissage horizontal à une vue de gauche qui se trouve être une icône - vous pouvez utiliser la même approche pour ajouter un remplissage à tout ce
UIView
que vous souhaitez utiliser comme vue de gauche du champ de texte.À l'intérieur de la
UITextField
sous-classe:Bien que nous soyons
UITextField
ici un sous- classement, je pense que c'est l'approche la plus claire.la source
la source
UITextField
est incorporé dans aUISearchBar
, comment dites-vous auUISearchBar
d'utiliser votreUITextField
sous-classe?merci les gars pour vos réponses, à ma grande surprise, aucun d'entre eux n'a vraiment adapté la bonne image de vue à mon champ de texte tout en fournissant le rembourrage nécessaire. puis j'ai pensé à utiliser le mode AspectFill et des miracles se sont produits. pour les futurs chercheurs, voici ce que j'ai utilisé:
le 35 dans le cadre de mon imageview représente la hauteur de mon emailTextfield, n'hésitez pas à l'ajuster à vos besoins.
la source
J'ai eu ce problème moi-même, et de loin la solution la plus simple est de modifier votre image pour simplement ajouter un rembourrage de chaque côté de l'image!
Je viens de modifier mon image png pour ajouter un remplissage transparent de 10 pixels, et cela fonctionne bien, sans aucun codage!
la source
Si vous utilisez un UIImageView comme leftView, vous devez utiliser ce code:
Attention: n'utilisez pas inside viewWillAppear ou viewDidAppear
la source
J'ai créé une méthode personnalisée dans ma classe ViewController, comme indiqué ci-dessous:
Maintenant, je peux appeler cette méthode à l'intérieur de (
viewDidLoad
méthode) et envoyer n'importe lequel de mesTextFields
à cette méthode et ajouter un remplissage pour la droite et la gauche, et donner des couleurs de texte et d'arrière-plan en écrivant une seule ligne de code, comme suit:Cela a parfaitement fonctionné sur iOS 7! J'espère que cela fonctionne toujours sur iOS 8 et 9 aussi!
Je sais que l'ajout de trop de vues peut rendre cet objet un peu plus lourd à charger. Mais lorsque je suis préoccupé par la difficulté des autres solutions, je me suis retrouvé plus partisan de cette méthode et plus flexible dans son utilisation. ;)
J'espère que cette réponse pourra être utile ou utile pour trouver une autre solution à quelqu'un d'autre.
À votre santé!
la source
Cela fonctionne pour moi, tout comme je recherche:
la source
Depuis iOS 13 et Xcode 11, c'est la seule solution qui fonctionne pour nous.
la source
// Définir Rightview de UITextField, swift 4.2
TxtPass.rightViewMode = UITextField.ViewMode.always let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 18, height: 18)) imageView.contentMode = UIView.ContentMode.scaleAspectFit let image = UIImage(named: "hidepass") imageView.image = image let rightView = UIView(frame: CGRect(x: 0, y: 0, width: 28, height: 18)) rightView.addSubview(imageView) rightView.contentMode = UIView.ContentMode.left TxtPass.rightView = rightView
la source
Une astuce: ajoutez un UIView contenant UIImageView à UITextField en tant que rightView. Cette UIView doit être plus grande, placez maintenant l'UIImageView à gauche de celle-ci. Il y aura donc un rembourrage d'espace à partir de la droite.
la source
Le moyen le plus simple est simplement de changer le champ de texte en RoundRect au lieu de Custom et de voir la magie. :)
la source
pour Swift2, j'utilise
la source
la source
Approche simple:
Remarque: la hauteur doit être inférieure à la largeur pour permettre un remplissage horizontal.
la source
Je me rends compte qu'il s'agit d'un ancien article et que cette réponse est un peu spécifique à mon cas d'utilisation, mais je l'ai publiée au cas où d'autres chercheraient une solution similaire. Je veux déplacer leftView ou rightView d'un UITextField mais je n'y mets pas d'images et je ne veux pas de constantes codées en dur.
Mon interface utilisateur demande de masquer le bouton d'effacement du champ de texte et d'afficher un UIActivityIndicatorView à l'emplacement du bouton d'effacement.
J'ajoute un spinner au
rightView
, mais hors de la boîte (sur iOS 13), il est décalé de 20 pixels vers la droite duclearButton
. Je n'aime pas utiliser des nombres magiques car la position du clearButton et de rightView est susceptible d'être modifiée à tout moment par Apple. L'intention de conception de l'interface utilisateur est «spinner où se trouve le bouton d'effacement», donc ma solution était de sous-classer UITextField et de le remplacerrightViewRect(forBounds)
.Voici un exemple de travail (sans Storyboard):
la source