2017-09-20 19 views
3

En WWDC 2017 presentation 204, ils disent que vous pouvez utiliser autolayout dans le titleView personnalisé.Comment utiliser la mise en page automatique dans un titleView personnalisé UINavigationBar

Il se passe autour de 07h53

wwdc-pic

Ils ne montrent jamais un exemple de la façon de le faire.

Lorsque j'essaie, j'obtiens une vue de taille zéro.

dans le générateur d'interface créer un UIView et ajouter un UISearchBar et un UIButton comme affaisse un peu comme ce

[seachBar] - [Bouton]

Il devient nulle largeur.

Est-ce que quelqu'un sait comment utiliser cette nouvelle fonctionnalité?

Répondre

0

Je vais répondre à ma propre question. Fondamentalement, la mise en page automatique fonctionne comme vous vous y attendez. Cependant, le gotcha est que chaque élément doit avoir des contraintes pour spécifier sa largeur ou il a besoin de sa taille intrinsèque spécifiée. Par exemple, si vous avez remplacé la barre de recherche par un uilabel, la vue de titre personnalisée correspondrait correctement à l'étiquette. La barre de recherche n'a apparemment pas de taille intrinsèque, donc quelque chose doit contrôler sa croissance.

J'ai mis une étiquette derrière la barre de recherche et je l'ai contrainte sur les bords supérieur, inférieur, principal et arrière de la barre de recherche. J'ai donné le UILABEL ALOT du texte et l'ai placé de sorte qu'il tronquerait quand il y a trop de texte. Lorsque j'ai exécuté l'application, la barre de recherche avait une largeur différente de zéro et la modification vers et depuis le paysage rétrécissait et étirait la barre de recherche comme souhaité. Le bouton s'effondrerait toujours à 0 largeur, mais il est facilement fixé en réglant la résistance à la compression plus élevée que l'uilabel.

C'est un peu un hack d'ajouter un UILabel factice à cet effet, je sais. Je serais ouvert à toutes les alternatives ...

Voici un example project.

+0

La réponse proposée ne fonctionne que dans iOS 11. Chaque os avant n'étendre titleview personnalisé donc une mise en page personnalisée sera nécessaire. – DerrickHo328