Dans mes piles de navigation enfant, je définis edgesForFextendedLayout. Non Quand je clique sur le bouton de retour, l'UITableView dans mon parent est déplacé vers le haut, comme si la barre de navigation n'existe pas. (La barre de navigation couvre la table). Pourquoi le paramètre edge de childs affecte t il son parent? Je veux seulement qu'il affecte le viewController courant. Dans mon parent, voici comment j'ai créé l'UITableView: Peut être que je place le cadre tableViews de façon incorrecte Je veux que la table commence sous la barre de navigation, mais fin avant la barre d'onglets. J'ai essayé de reproduire votre problème comme ceci: Configurer un UITableView dans un UIViewController avec une seule cellule qui pousse un nouvel UIViewController. Dans cette vue, le contrôleur visualiseDidLoad. Je définis self. edgesForExtendedLayout. None. Quand je presse quotbackquot pour revenir à l'UITableViewController. Je ne vois aucun changement à la position de la vue de tableau. Est ce que vous modifiez les edgeForExtendedLayout sur le UINavigationController directement ndash JAL Apr 27 16 à 20: 15Lorsque vous démarrez 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. Lorsque la vue de ce contrôleur de vue est disposée, elle débutera où la barre de navigation se termine, mais cette propriété définit les côtés de la vue (haut, gauche, bas, droite) qui peuvent être étendus pour remplir l'écran entier. Laissons le voir avec un exemple: Ici, vous ne définissez pas la valeur de edgesForAxtendedLayout. Donc 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 sinon, mais en même temps, vous voulez que votre table couvre l'ensemble de l'écran lors du défilement. Dans ce cas, l'ajustement de edgesForAxtendedLayout à None 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 encarts (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 l'écran entier. 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 NO (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). En commençant par 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. Lorsque la vue de ce contrôleur de vue est disposée, elle débutera où la barre de navigation se termine, mais cette propriété définit les côtés de la vue (haut, gauche, bas, droite) qui peuvent être étendus pour remplir l'écran entier. Laissons le voir avec un exemple: Ici, vous ne définissez pas la valeur de edgesForAxtendedLayout. Donc 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 sinon, mais en même temps, vous voulez que votre table couvre l'ensemble de l'écran lors du défilement. Dans ce cas, l'ajustement de edgesForAxtendedLayout à None 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 encarts (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 l'écran entier. 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 NO (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).Layout Guide L'une des responsabilités d'un conteneur de contrôleur de vue est de mettre en forme ses vues de contrôleur de vue enfant. Ce guide explique comment vous pouvez le contrôler. Reveal vs Peek Amount C'est la façon dont vous spécifiez la position horizontale de la vue de dessus lorsqu'elle est ancrée sur un côté. Il est important de connaître la différence entre le repère ancrée et les quantités de peaux ancrées lors du soutien de plusieurs orientations et tailles d'écran. Si vous ne devez supporter qu'une seule orientation sur une taille d'écran spécifique, alors la différence n'a pas d'importance. Reveal (Reveal) Le montant horizontal de la sous vue à afficher. Peek Le montant horizontal de la vue de dessus à afficher. La convention de dénomination pour les propriétés: anchor (Left or Right) (Reveal ou Peek) Montant. La combinaison de toutes les possibilités conduit à ces quatre propriétés: anchorLeftPeekAmount anchorLeftRevealAmount anchorRightPeekAmount anchorRightRevealAmount Régler le montant de révéler sur un côté permettra de calculer la quantité de peek pour ce même côté et vice versa. La propriété que vous définissez sera une valeur fixe entraînant la calculation de l'autre. Il s'agit d'une propriété intégrée à UIViewController. Voici une description de l'iOS 7 Guide de transition de l'interface utilisateur: La propriété edgesForFixedendLayout utilise le type UIRectEdge, qui spécifie chacun des rectangles quatre arêtes, en plus de spécifier aucun et tous. Utilisez les arêtes pour indiquer que les bords d'une vue doivent être étendus, quelle que soit la transparence de la barre. Par défaut, la valeur de cette propriété est UIRectEdgeAll. ECSlidingViewController utilise cette valeur pour décider sur lequel des bords de vues pour étendre dehors au conteneur. Si un bord n'est pas étendu, il sera placé sur le guide de mise en page. C'est le même comportement que les conteneurs du contrôleur de vue UIKit, sauf que les bords latéraux ont une signification. En laissant UIRectEdgeTop hors du borduresForExtendedLayout masque placera le bord supérieur sur le guide de mise en page supérieur. En laissant UIRectEdgeBottom hors du borduresForExtendedLayout masque placera le bord supérieur sur le guide de mise en page inférieur. En laissant UIRectEdgeLeft hors du borduresForExtendedLayout, le masque placera le bord gauche à l'endroit où le bord supérieur de la vue de dessus sera ancré à gauche. Cela affecte uniquement les contrôleurs de vue utilisés comme sousRightViewController. Il peut occuper toute la largeur du conteneur ou alors il sera égal au montant révélateur (qu'il soit fixe ou calculé). En laissant UIRectEdgeRight hors du borduresForExtendedLayout, le masque placera le bord droit vers l'endroit où le bord supérieur de la vue du haut sera ancré à droite. Cela n'affecte que les contrôleurs de vue utilisés comme sousLeftViewController. Il peut occuper toute la largeur du conteneur ou alors il sera égal au montant révélateur (qu'il soit fixe ou calculé). La disposition des vues en haut et en dessous peut être personnalisée. Cela permet de créer un objet conforme au protocole ECSlidingViewControllerLayout et de le renvoyer dans la méthode des délégués des contrôleurs de vue glissante: slidingViewController: layoutControllerForTopViewPosition: ECSlidingViewControllerLayout a une seule méthode à implémenter: Vous devez retourner un CGRect représentant un cadre pour le viewController donné et TopViewPosition. Vous pouvez retourner CGRectInfinite à repli sur la disposition par défaut. Retourne un CGRect qui est calculé en fonction du cadre de vues slidingViewController s. S'il est fixe ou basé sur le cadre d'écran, les changements de rotation et de limites peuvent briser la disposition. Positionnez la vue de dessus en fonction des montants ancrés de slidingViewController s. Conservez la sémantique de la topViewPosition. Par exemple, si la topViewPosition est ECSlidingViewControllerTopViewPositionAnchoredRight. Puis positionnez la vue de dessus quelque part vers la droite. Depuis ce qui précède sont des suggestions. Vous n'avez pas à les suivre. Il suffit de savoir les conséquences que vous pouvez briser la disposition de rotation ou la sémantique de l'API ECSlidingViewController.
No comments:
Post a Comment