Modification de la taille de la UISearchBar TextField?
J'ai un UITableView avec un Index sur le côté, je veux ajouter un UISearchBar, mais l'indice de chevauchement avec les "x" pour effacer la recherche. J'ai remarqué dans l'application Contacts, le champ à l'intérieur de la UISearchBar est redimensionnée pour s'adapter, mais je ne peux pas savoir comment faire cela dans ma propre application.
J'ai essayé ce qui suit dans mon viewDidLoad, mais il ne semble pas fonctionner.
UITextField * textField = (UITextField *)[[self.search subviews] objectAtIndex:0];
CGRect r = textField.frame;
[textField setFrame:CGRectMake(r.origin.x, r.origin.y, r.size.height, r.size.width-30)];
Des idées?
Vous devez vous connecter pour publier un commentaire.
il est beaucoup plus facile que toutes ces suggestions. Dans interface builder, au lieu de mettre la Barre de Recherche comme en-tête de votre Table, vous pouvez mettre une Vue à la place. Ensuite, placez une Barre de Navigation à l'intérieur de ce point de Vue. Prenez la gauche de la poignée de redimensionnement de la Barre de Navigation et la tirer vers la droite jusqu'à la N B est à seulement 25 pixels de large. Effacer le Titre dans la N B (double-cliquez pour le sélectionner, puis de les supprimer). Ensuite, ajouter une Barre de Recherche dans la même Vue. Déplacer son droit de redimensionnement de la poignée vers la gauche, ajuster de sorte qu'il jouxte le N B. c'est tout.
Vous pouvez activer un bouton annuler si vous le souhaitez et aussi de ne pas chevaucher les index (reste dans la barre de recherche).
Apparemment une Vue de la Table ne peut avoir 1 sous-vue dans son en-tête, c'est pourquoi vous avez besoin de mettre la Vue en premier, puis le N B et de la Barre de Recherche à l'intérieur d'elle.
Mise à JOUR: voir le Début de Développement pour iPhone à partir de Apress, p. 241 du SDK 3 édition. Vous venez de désactiver l'index lors de la recherche.
Aussi ils parlent de l'ajout d'une loupe en haut de l'index.
Grand livre de tous les environs.
Pourquoi ne pas simplement faire la réelle UISearchBar petits horizontalement, et de la place un (vide) UINavigationBar à la droite de celui-ci? Ils vont rendre le fond exactement la même.
Mieux que le piratage de l'intérieur de la Pomme, les objets qui pourraient changer.
Aussi, lors de l'animation de la UISearchBar de la largeur, vous remarquerez que l'intérieur du champ de texte n'est pas animé avec elle. Vous pouvez résoudre ce problème en appelant UISearchBar du "layoutSubviews" au sein de votre bloc d'animation après la modification de son cadre. (c'est là où il détermine la taille de l'intérieur de champ de texte)
Ok, j'ai trouvé une solution.
Inclure ce code dans les drawRect: méthode.
Remarque: kRightSideMargin est une constante, que je mis dans mon fichier d'en-tête; je l'ai mis à 25.
Merci pour les suggestions de tout le monde.
Comme Padraig a souligné tout ce que vous avez à faire est de la sous-classe la barre de recherche. Créez votre UISearchBar sous-classe, et ajouter le code suivant dans la
layoutSubviews
méthode:Cette boucle par tous les sous-vues et les vérifie à l'encontre de type UITextField. De cette façon, si jamais il se déplace dans sa ligne de sous-vues ce sera encore l'attraper. J'ai trouvé 285 juste assez large pour ne pas se chevauchent avec l'index de ma tableView.
Comme d'iOS 6, la barre de navigation solution ne fonctionne pas bien pour moi à cause de légèrement différent ressemble maintenant entre les UISearchBar et UINavigationBar. Donc, je suis passé à quelque chose de semblable à Padraig de l'approche par sous-classement de la UISearchBar.
Edit: Ah, je n'ai pas essayé, mais je pense que vous pourriez être en mesure de fixer une barre de navigation du clipToBounds = OUI pour l'éteindre c'est une nouvelle ombre, créant ainsi une apparence cohérente à nouveau entre les deux contrôles.
Je suis en utilisant ViewDeck et veulent montrer un UISearchbar à l'intérieur de la
leftController
.Maintenant le problème est que si j'ouvre le côté gauche qui contient la navigation, le droit peu chevauche mon champ de recherche.
Je me suis débarrassé de ce par rapport à l'écriture
UISearchBar
, le champ sera toujours avoir la même largeur, mais dans un cas il y a le ViewDeck se chevauchent et, dans l'autre cas, je me cache dans la ViewDeck bits, puis sur le bouton annuler de l'espace:Sous-Classement UISearchBar
ViewController classe
Dans ma Navigation classe j'ai besoin de remplacer ces deux
UISearchbarDelegate
méthodes pour aller en plein écran avec les résultats de la recherche:Résultat
ViewDeck montrant à droite:
un http://i5.minus.com/jA34MnXVqPZez.png
De recherche en plein écran (Le bouton et la portée des boutons sont animés dans).
un http://i2.minus.com/jjKEgXLur1kH6.png
Désolé pour le faire glisser de nouveau.
Je voulais le UISearchBar à être plus court, et je suis en utilisant un UISearchBarController, mais sans réellement vouloir l'index. C'est parce que j'ai une superposition à droite:
Pour ce faire, j'ai un faux sectionIndex avec un élément vide, puis le cacher. Voici comment j'ai procéder:
Cela réduit le UISearchBar et peaux de l'indice ne peut donc pas être exploitées (une petite section serait contraire à la main à la gauche de la superposition de gemmage faire défiler la UITableView vers le haut). Comme ceci:
Le meilleur de tous, lorsque vous utilisez le moteur de recherche, vous obtenez toujours la totalité de la largeur de la barre:
Il suffit de mettre une UIView et de mettre la barre de recherche à l'intérieur que UIView. UIView doit être de la même taille que UISearchBar.
cela a fonctionné pour moi.
Le champ de texte utilisé dans UISearchBar est une sous-classe de l'objet UITextField appelé UISearchBarTextField.
Autant que je sache, il n'y a pas moyen de redimensionner une UISearchBarTextField à l'aide de l'API publique, et la API privée ne révèle pas beaucoup non plus.
Peut-être vous pouvez prendre un coup d'oeil à UISearchBarTextField de sous-vues, si elle a tout.
Mise à JOUR: Il ne le fait pas.
Mise à JOUR 2: je pense que vous devriez jeter un coup d'oeil à UITextField de rightView de la propriété. Le code ci-dessous, bien que cela ne fonctionne pas, semble être un bon point de départ:
Désolé pour Necroposting, mais j'ai trouvé une autre façon de faire un peu d'espace sur la droite de la zone de texte.
J'ai eu le problème, que j'ai eu une indexé tableview avec une barre de recherche comme la première ligne. Maintenant, l'index et dans la barre de recherche (de l'IB, btw.) ont été superposées. Il a essayé presque tout sans succès. Il semble que les propriétés width et height de la textifield ne pas répondre... Alors je suis venu avec cette:
Je ne peut toujours pas régler la taille de l'espace, mais ce n'est pour l'instant... bien que... assez bizarre solution...
UIButton
de retour ici.Tout le monde a prévu des moyens pour modifier l'INTERFACE utilisateur. J'ai découvert la façon d'obtenir des résultats identiques. Vous devez fournir deux implémentations:
Plus important encore, assurez-vous de l'initialiser avec:
Ne valide UISearchBar (ou de passer du néant) permettra d'éviter l'ajustement de l'objet UITextField pour l'index.
Si vous retourner nil, l'index ne sera pas affichée, et l'objet UITextField ne sera pas ajusté correctement.
J'ai envoyé un rapport de bug à Apple, ce qui suggère qu'il semble logique que seulement 2 doit être requis, pas de #1. Je n'ai rien trouvé dans l'Homme de l'Interface de ligne Directrice (iPhone HIG) nécessitant l'utilisation de la UISearchDisplayController.
-initWithSearchBar:contentsController:
— et cela a bien fonctionné pour redimensionner la barre de recherche de terrain.La clé est d'utiliser la "Barre de Recherche et la Recherche de contrôle de l'Affichage" et pas la "Barre de Recherche" lorsque vous utilisez l'Interface Builder.
Il sorte de ressemble comme si Apple redimensionner l'affichage (notez que l'index est animé à la droite, hors de l'écran), il est plus grand que l'écran.
J'imagine que vous auriez besoin de mettre en œuvre les
searchBarTextDidBeginEditing:
méthode de laUISearchBarDelegate
pour déclencher ce à l'endroit approprié. Ce n'est, cependant, se sentir un peu hacky faire peut-être il ya une meilleure façon de le faire.Un autre appraoch (mais fastidieux) serait pour redimensionner la barre de recherche, et à combler le " gap " avec une barre de navigation. Fonctionne pour moi.
Ce que j'ai trouvé n'est pas beaucoup mieux. En gros, je fais un vide de la vue avec l'image que je veux utiliser pour la barre de recherche. Puis-je créer un UIToolbar à aller dans la barre de recherche. Assurez-vous de définir son cadre à la même image que la UIView, sauf que la valeur de Y a à -1; sinon, vous aurez deux frontières tracées dans la partie supérieure. Créez ensuite votre UISearchBar, mais définir le cadre de la largeur de 30 (ou tout ce qui fait sens pour votre application) de moins que l'UIView. Ajouter des sous-vues et de définir votre UIView comme le tableHeaderView.
J'ai suivi les conseils de Mike en faisant une UIView, puis mettre une Barre de Navigation et UISearch Bar à l'intérieur. Le seul problème est la première fois la barre de recherche est montré à son arrière-plan est le même que la Barre de Navigation normalement?
Fait intéressant, si j'active la recherche, puis cliquez sur annuler l'arrière-plan de cette "fixe"!?
Je suis en utilisant le SDK 3.0, j'ai donc enlevé le UISearchBar élément fait quand j'ai traîné un UISearchDisplayController à ma PLUME, puis fait le point de vue comme décrit ci-dessus et câblé jusqu'au propriétaire du fichier et la barre de recherche de sortie dans la recherche de contrôleur d'affichage.
Il fonctionner très bien!!!
UISearchBar
ne répond pas àsetContentInset