UITextfield leftView/rightView rembourrage sur iOS7
La leftView et rightView de vues d'un objet UITextField sur iOS7 sont vraiment proche de la zone de texte de la frontière.
Comment peut-je ajouter quelque chose (horizontal) rembourrage de ces éléments?
J'ai essayé de modifier le cadre, mais ne fonctionne pas
uint padding = 10;//padding for iOS7
UIImageView * iconImageView = [[UIImageView alloc] initWithImage:iconImage];
iconImageView.frame = CGRectMake(0 + padding, 0, 16, 16);
textField.leftView = iconImageView;
S'il vous plaît, notez que je ne suis pas intéressé par l'ajout d'un rembourrage pour le champ de texte, à l'instar de ce De padding pour objet UITextField avec UITextBorderStyleNone
- double possible de encart de Texte pour objet UITextField?
- Non, c'est de demander à propos de la mise en retrait de l'image affichée comme une leftView dans un champ de texte. Pas de mise en retrait du texte lui-même. Essayez son code et vous verrez que la mise leftView à une image des lieux que l'image vers le haut contre le bord gauche du champ de texte, sans rembourrage. Il semble laid.
Vous devez vous connecter pour publier un commentaire.
Était en train de travailler sur moi-même et utilisé cette solution:
Cela vous permettra de déplacer l'image au-dessus de la droite par 10 au lieu d'avoir l'image pressé contre le bord dans iOS 7.
En outre, c'était dans une sous-classe de
UITextField
, qui peut être créé 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 pouvez importer
#import <QuartzCore/QuartzCore.h>
Ajouter le
rightViewRectForBounds
méthode ci-dessusDans Interface Builder, cliquez sur le Champ que vous souhaitez à la sous-classe et de modifier l'attribut de classe est le nom de cette nouvelle sous-classe
Une solution beaucoup plus simple, qui prend avantage de
contentMode
:Dans Swift 2,
Dans Swift 3,
Façon la plus simple est d'ajouter une UIView à leftView/righView et ajouter une ImageView de UIView , ajuster l'origine de l'ImageView à l'intérieur de UIView partout où vous le souhaitez , cela a fonctionné pour moi comme un charme. Il n'a besoin que de quelques lignes de code
Cela fonctionne très bien pour Swift:
Cela fonctionne pour moi
Peut-il vous aide.
J'aime bien cette solution, car il résout le problème avec une seule ligne de code
Remarque: .. ou les 2 si vous envisagez d'inclure QuartzCore une ligne 🙂
La meilleure façon de le faire est de simplement faire une classe à l'aide de la sous-classe de l'objet UITextField et dans .m fichier
en faisant cela, allez à votre storyboard ou xib et cliquez sur l'identité de l'inspecteur et de remplacer UITextfield avec votre propre "CustomTextField" dans la classe option.
Remarque: Si vous donnez simplement rembourrage avec mise en page automatique pour textfield, alors votre demande ne sera pas exécuté et ne montrer que l'écran est vide.
J'ai trouvé cela quelque part...
Créer un UITextField de la classe et de l'utilisation de cette classe au lieu de UITextField. Override - (CGRect) textRectForBounds:(CGRect)limites pour définir le rectangle que vous avez besoin
Exemple
J'ai eu ce problème moi-même, et de loin, la meilleure solution est de modifier votre image de simplement ajouter le remplissage de chaque côté de l'image!
J'ai juste modifié mon image png ajouter 10 pixels transparents de rembourrage, et il fonctionne bien, sans le codage à tous!
Un truc: Ajouter une UIView contenant UIImageView à UITextField comme rightView. Cette UIView doit être de plus grande taille, aujourd'hui place de la UIImageView à gauche. Donc, il y aura un remplissage de l'espace de droite.
Voici une solution:
Exemple ci-dessous est pour l'ajout de remplissage horizontal à gauche vue de ce qui arrive à être une icône - vous pouvez utiliser la même approche pour l'ajout de rembourrage pour tout
UIView
que vous souhaitez utiliser en tant que le champ de vue de gauche.À l'intérieur de
UITextField
sous-classe:Même si nous sommes un sous-classement
UITextField
ici, je crois que c'est le plus propre approche.UITextField
est incorporé dans unUISearchBar
, comment vous dire laUISearchBar
pour utiliser votreUITextField
sous-classe?merci les gars pour vos réponses, à ma grande surprise, aucun d'entre eux vraiment monté à la droite de l'image vue à mon textfield tout en fournissant toujours le besoin de rembourrage. puis j'ai pensé à utiliser la AspectFill mode et les miracles qui s'est passé. pour les futurs demandeurs d', voici ce que j'ai utilisé:
35 dans le cadre de ma imageview représente la hauteur de mes emailTextfield, n'hésitez pas à l'adapter à vos besoins.
Si vous utilisez une UIImageView comme leftView alors vous devez utiliser ce code :
Attention : Ne pas utiliser à l'intérieur viewWillAppear ou viewDidAppear
J'ai créé une méthode personnalisée dans mon ViewController classe, comme indiqué ci-dessous:
Maintenant je peux appeler cette méthode à l'intérieur (
viewDidLoad
méthode) et de les envoyer l'un de mesTextFields
à cette méthode et ajouter rembourrage pour les deux de droite et de gauche, et de donner le texte et les couleurs d'arrière-plan par écrit une seule ligne de code, comme suit:Cela a Fonctionné parfaitement sur iOS 7! Espérons que cela fonctionne encore sur iOS 8 et 9 trop!
Je sais que l'ajout de trop de points de Vue pourrait les rendre un peu plus lourd objet à charger. Mais quand inquiète de la difficulté à d'autres solutions, je me suis retrouvé plus biaisée de cette méthode et plus souple avec l'aide de cette façon. 😉
Espère que cette réponse pourrait être utile ou très utile de trouver une autre solution pour quelqu'un d'autre.
Cheers!
Façon la plus simple est tout simplement de changer le Textfield comme RoundRect au lieu de la Coutume et de voir la magie. 🙂
pour Swift2 , j'utilise
Au lieu de manipluating imageView ou de l'image que l'on peut surcharger une méthode fournie par apple pour rightView.
et de la même manière, nous pouvons substituer au-dessous de la touche func pour la vue de gauche.
Approche Simple:
Remarque: la Hauteur doit être inférieure à la largeur pour permettre le remplissage horizontal.