Correction du problème de chevauchement de la barre de navigation d'iOS 7 Il y a eu un problème qui gêne les développeurs iOS depuis que les jolies barres de navigation transparentes sont apparues dans iOS 7, quelque chose que lorsque je demande aux gens pourquoi cela arrive, ils n'ont absolument aucune idée. Il existe un correctif simple que tout le monde a utilisé, mais c'est un hack et de nombreux développeurs l'utilisent sans comprendre le problème. Mettez cela dans votre contrôleur et tout à coup ça marche. Un peu Maintenant, la barre de navigation n'a aucun intérêt à être transparente, ce qui détruit le but. Les vues qui devraient être derrière lui, notre vue de racine, et sa couleur de fond, aren39t montrant à travers plus. Honnêtement, vous pourriez ne pas se soucier, cela pourrait être suffisant pour vous, mais il est important que vous compreniez toujours le problème, alors lisez la suite. Si vous avez fait le développement web, c'est sorta comme débordement: caché dans CSS. Fait le travail, mais il est toujours une sorte de quothackquot. Donc, le problème est que lorsque you39re cadre view39s est défini, contrairement à iOS 6, le cadre englobe encore la zone sous la barre de navigation. Ce que vous pourriez ne pas réalisé, est si un UIScrollView. Ou une sous-classe comme UITableView. Est la vue de la racine pour votre contrôleur, elle aura it39s contentInset la propriété a placé correctement, en permettant à l'armature d'être sous la barre de navigation, mais l'origine réelle qu'il commence à tirer de est du bas de la barre de navigation à la place. Cela signifie que nous pouvons très simplement résoudre le problème de la barre de navigation se chevauchant en faisant de notre vue racine un UIScrollView (ou sous-classe de) à la place, tout en laissant notre couleur de fond briller. Vous pouvez faire de votre vue racine un UIScrollView en définissant la méthode loadView, où votre vue racine et ses sous-aperçus doivent être créées si vous créez vos vues par programme. Si vous essayez ceci, vous obtiendrez ceci. Notez le rouge brillant à travers la barre de navigation Notez que nous avons mis l'origine blue view39s pour être le coin supérieur gauche Tout est assis bien et de travailler comment Apple attendait d'utiliser les barres de navigation transparente. Cela a l'avantage supplémentaire de nous donner un moyen plus facile d'étendre notre mise en page au-delà de l'écran trop maintenant que nous utilisons une vue de défilement, mais vous pourriez ne pas avoir besoin de toute façon, au lieu de cela vous pouvez simplement l'utiliser comme un remplacement pour UIView qui peut avoir it39s Ensemble contentInset. Je n'ai pas examiné les différences de mémoire pour cela, mais mon espoir est qu'il serait extrêmement minime. Si vous souhaitez en savoir plus sur RubyMotion, consultez mes screencasts à motioninmotion. tv ou mon prochain livre RubyMotion for Rails Developers. Qui est disponible pour pré-commander maintenant, sous un modèle de prix Pay What You Want, avec la partie 1 presque terminé et devrait être publié prochainement. RubyMotion Adventures - The MotionInMotion BlogStarting dans iOS7, les contrôleurs de vue utilisent la mise en page plein écran par défaut. Dans le même temps, vous avez plus de contrôle sur la façon dont il expose ses vues, et thats fait avec ces propriétés: Fondamentalement, avec cette propriété, vous définissez les côtés de votre vue peut être étendu pour couvrir l'écran entier. Imaginez que vous poussez un UIViewController dans un UINavigationController. Quand la vue de ce contrôleur de vue est disposée, elle commencera là où la barre de navigation se termine, mais cette propriété définira les côtés de la vue (en haut, à gauche, en bas, à droite) qui peuvent être étendus pour remplir l'écran entier. Laissez-le voir avec un exemple: Ici, vous ne définissez pas la valeur de edgesForAxtendedLayout. Par conséquent la valeur par défaut est prise (UIRectEdgeAll), de sorte que la vue étend sa mise en page pour remplir l'écran entier. Ceci est le résultat: Comme vous pouvez le voir, le fond rouge s'étend derrière la barre de navigation et la barre d'état. Maintenant, vous allez définir cette valeur sur UIRectEdgeNone. Vous indiquez au contrôleur de vue de ne pas étendre la vue pour couvrir l'écran: Cette propriété est utilisée lorsque votre vue est un UIScrollView ou similaire, comme un UITableView. Vous voulez que votre table commence où la barre de navigation se termine, parce que vous ne verrez pas le contenu entier si non, mais en même temps, vous voulez que votre table pour couvrir l'écran entier lors du défilement. Dans ce cas, l'ajustement de edgesForAxtendedLayout à Aucun ne fonctionnera pas car votre table commencera à défiler où la barre de navigation se termine et elle ne va pas derrière elle. Voici où cette propriété est pratique, si vous laissez le contrôleur de vue automatiquement ajuster les inserts (en définissant cette propriété sur OUI, également la valeur par défaut), il ajoutera inséré au haut de la table, de sorte que la table commencera où la navigation Bar, mais le défilement couvrira tout l'écran. C'est alors qu'est réglé sur NON: Et OUI (par défaut): Dans les deux cas, la table défile derrière la barre de navigation, mais dans le deuxième cas (OUI), elle commencera en dessous de la barre de navigation. Cette valeur est juste un ajout aux précédentes. Si la barre d'état est opaque, les vues ne seront pas étendues pour inclure la barre d'état trop, à moins que ce paramètre soit OUI. Donc, si vous étendez votre vue pour couvrir la barre de navigation (edgeForExtendedLayout à UIRectEdgeAll) et le paramètre est NON (par défaut), il ne couvrira pas la barre d'état si son opaque. Si quelque chose n'est pas clair, écrire un commentaire et réponse mal à elle. Comment iOS sait ce que UIScrollView à utiliser iOS saisit la première sous-vue dans votre vue viewcontrollers, donc celle de l'index 0, et si c'est une sous-classe de UIScrollView applique alors les propriétés expliquées à elle. Bien sûr, cela signifie que UITableViewController fonctionne par défaut (puisque l'UITableView est la première vue).
No comments:
Post a Comment