Par programmation obtenir la hauteur de la barre de navigation
Je sais que la présence de la plus-vue-contrôleur (barre de navigation) pousse le UIView par sa hauteur. Je sais aussi que ce height = 44px. J'ai aussi découvert que cette poussée vers le bas maintient la [self.view].frame.origin.y = 0
.
Alors, comment puis-je déterminer la hauteur de cette barre de navigation, autres que les valeurs de la constante?
Ou, version plus courte, comment puis-je savoir que mon UIView montre avec la barre de navigation en haut?
L'ampoule a commencé à venir sur. Malheureusement, je n'ai pas constaté d'une manière uniforme pour corriger le problème, comme décrit ci-dessous.
Je crois que mon problème centres sur mon autoresizingMasks. Et la raison pour laquelle j'ai conclu que est les mêmes symptômes existent, avec ou sans une UIWebView. Et que le symptôme, c'est que tout est peachy pour le Portrait. Pour le Paysage, le fond le plus UIButton pop vers le bas, derrière la TabBar.
Par exemple, sur une UIView, j'ai, de haut en bas:
UIView – les deux sources set (cas par défaut) et pas de jambes de suspension
UIScrollView - Si j'ai mis les deux ressorts, et effacer tout le reste (comme le UIView), puis le UIButton empiète sur l'objet immédiatement au-dessus d'elle. Si j'ai effacer tout, puis UIButton est OK, mais le truc tout en haut se cache derrière la Barre de Réglage uniquement le haut de jambe de force, le UIButton pop vers le bas, derrière la Barre d'Onglet.
UILabel et UIImage prochaine verticalement au – dessus de jambe de jeu, flexible partout ailleurs
Juste pour compléter le tableau, pour les quelques-uns qui ont une UIWebView:
UIWebView - Struts: en haut, à gauche, à droite Ressorts: les deux
UIButton – rien mis, c'est à dire, souple partout
Bien que mon ampoule est faible, il semble y avoir de l'espoir.
S'il vous plaît garder avec moi parce que j'avais besoin de plus d'espace que celui qui est prévu pour un court commentaire de réponse.
Merci d'essayer de comprendre ce que je suis vraiment la pêche pour ... donc voilà.
1) Chaque UIViewController (un TabBar app) a une UIImage, du texte et de quoi que ce soit sur le dessus. Un autre dénominateur commun est un UIButton sur le fond. Sur certains UIViewControllers j'ai une UIWebView au-dessus de la UIButton.
Donc, UIImage, texte, etc. UIWebView (sur CERTAINS) UIButton
Entourant tous les ci-dessus est un UIScrollView.
2) Pour ceux qui ont une UIWebView, son autoresizingMask ressemble:
—
|
—
^
|
|
|—| ←----→ |—|
|
|
V
Le UIButton du masque n'a rien réglé, c'est à dire, souple partout
Au sein de mon -viewDidLoad, je l'appelle mon -repositionSubViews à l'intérieur de laquelle je ne les suivants:
Si il n'y a pas de UIWebView, je n'ai rien, sauf le centre de la UIButton que j'ai placé dans l'IB.
Si j'ai une UIWebView, puis-je déterminer sa *contenu*la Hauteur et de définir son cadre pour encadrer l'ensemble du contenu.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Une fois que j'ai fais, puis je par programme pousser la UIButton vers le bas de sorte qu'il se termine placé au-dessous de la UIWebView.
Tout fonctionne, jusqu'à ce que j'effectue une rotation de Portrait à Paysage.
J'appelle ma -repositionSubViews au sein de mon -didRotateFromInterfaceOrientation.
Pourquoi le contenu de la hauteur de mon UIWebView change pas avec la rotation?.
De Portrait à Paysage, le contenu de la largeur doivent développer et le contenu de la hauteur devrait se réduire. Il ne visuellement comme il se doit, mais non pas selon mon NSLog.
De toute façon, avec ou sans une UIWebView, le bouton que j'ai parlé se déplace au-dessous de la TabBar quand en mode Paysage, mais il ne sera pas faites défiler vers le haut pour être vu. Je le vois derrière la TabBar quand je scroll "vigoureusement", mais il "retombe" derrière la TabBar.
Bas de la ligne, cette dernière est la raison pour laquelle j'ai demandé à propos de la hauteur de la TabBar et la NavigationBar parce que la TabBar plantes lui-même au bas de la UIView et la NavigationBar pousse le UIView vers le bas.
Maintenant, je vais ajouter un commentaire ou deux ici, parce qu'ils n'aurait pas eu de sens plus tôt.
Sans UIWebView, je laisse tout comme c'est vu par l'IB.
Avec une UIWebView, je l'augmentation de la UIWebView cadre.hauteur contentHeight et aussi ajuster à la hausse la hauteur de l'entourage UIScrollView qui entoure tous les sous-vues.
Bien là vous l'avez.
Vous devez vous connecter pour publier un commentaire.
Faire quelque chose comme cela ?
La swift version est trouve ici
Mise à JOUR
iOS 13
Comme le
statusBarFrame
a été dépréciée eniOS13
vous pouvez utiliser ceci:Avec l'iPhone-X, la hauteur de la barre du haut (barre de navigation + barre d'état) est modifiée (augmentée).
Essayer si vous voulez exacte de la hauteur de la barre du haut (à la fois de la barre de navigation + barre d'état):
Mise à JOUR
iOS 13
Comme le
statusBarFrame
a été dépréciée eniOS13
vous pouvez utiliser ceci:Objective-C
Swift 4
Pour la facilité, essayez cette UIViewController extension
Swift 3
Swift version:
Avez-vous essayé?
De sorte que tous nous réellement besoin est
Ma demande a un couple de points de vue qui exige une personnalisation de la barre de navigation dans l'INTERFACE utilisateur pour look & feel toutefois sans manette de navigation. Et l'application est nécessaire pour soutenir iOS version antérieure à la version iOS 11, de sorte que la pratique de la zone de sécurité guide de présentation ne peut pas être utilisé, et je dois ajuster la position et la hauteur de la barre de navigation de la programmation.
J'ai attaché la Barre de Navigation à ses superview directement, en sautant de la zone de sécurité guide de présentation comme mentionné ci-dessus. Et la barre d'état hauteur peut être récupéré à partir de UIApplication facilement, mais la navigation par défaut hauteur de la barre est vraiment une douleur-cul...
Il m'a frappé près de la moitié d'une nuit, avec un certain nombre de recherches et d'essais, jusqu'à ce que j'ai enfin eu la réponse dans un autre post (pas de travail pour moi), que vous pouvez réellement obtenir la hauteur de UIView.sizeThatFits(), comme ceci:
Enfin, un parfait barre de navigation à la recherche exactement la même que la intégré dans un!
L'ampoule a commencé à venir sur. Malheureusement, je n'ai pas constaté d'une manière uniforme pour corriger le problème, comme décrit ci-dessous.
Je crois que mon problème centres sur mon autoresizingMasks. Et la raison pour laquelle j'ai conclu que est les mêmes symptômes existent, avec ou sans une UIWebView. Et que le symptôme, c'est que tout est peachy pour le Portrait. Pour le Paysage, le fond le plus UIButton pop vers le bas, derrière la TabBar.
Par exemple, sur une UIView, j'ai, de haut en bas:
UIView – les deux sources set (cas par défaut) et pas de jambes de suspension
UIScrollView -
Si j'ai mis les deux ressorts, et effacer tout le reste (comme le UIView), puis le UIButton empiète sur l'objet immédiatement au-dessus d'elle.
Si j'ai effacer tout, puis UIButton est OK, mais le truc tout en haut se cache derrière la Barre d'état
Réglage uniquement le haut de jambe de force, le UIButton pop vers le bas, derrière la Barre d'Onglet.
UILabel et UIImage prochaine verticalement au – dessus de jambe de jeu, flexible partout ailleurs
Juste pour compléter le tableau, pour les quelques-uns qui ont une UIWebView:
UIWebView -
Jambes de force: haut, gauche, droite
Ressorts: les deux
UIButton – rien mis, c'est à dire, souple partout
Bien que mon ampoule est faible, il semble y avoir de l'espoir.
Voici le début de ma réponse à votre mise à jour:
Serait-ce que parce que votre auto redimensionnement qui n'ont pas de autoresizingMask pour toutes les directions?
Une autre suggestion avant que je reviens pour cela, pourriez-vous utiliser une barre d'outils pour répondre à vos besoins. C'est un peu plus simple, sera toujours sur le fond, auto-tourne/positions. Vous pouvez afficher/masquer à volonté etc. Un peu comme ceci: http://cdn.artoftheiphone.com/wp-content/uploads/2009/01/yellow-pages-iphone-app-2.jpg
Vous pouvez avoir regardé cette option, mais juste le jeter là-bas.
Une autre idée, pourriez-vous éventuellement de détecter l'orientation sont en rotation, et il suffit de placer le bouton de programme, afin de les ajuster à la barre d'onglet. (Ce qui est possible avec code)
J'ai utilisé:
Travail formidable si vous voulez obtenir la barre de navigation de la hauteur ET de son origine Y sont.
Pratique Swift 4 extension, dans le cas où c'est utile à quelqu'un d'autre.
Utilisation: