Ich weiß, dass das Vorhandensein des mehr Ansichts-Controllers (Navigationsleiste) das UIView um seine Höhe nach unten drückt. Ich weiß auch, dass diese Höhe = 44px ist. Ich habe auch festgestellt, dass dieser Druck nach unten die [self.view].frame.origin.y = 0
.
Wie bestimme ich die Höhe dieser Navigationsleiste, anstatt sie nur auf eine Konstante zu setzen?
Oder, kürzere Version, wie stelle ich fest, dass mein UIView mit der Navigationsleiste oben angezeigt wird?
Die Glühbirne ging an. Leider habe ich keinen einheitlichen Weg gefunden, um das Problem zu beheben, wie unten beschrieben.
Ich glaube, dass sich mein gesamtes Problem auf meine Autoresizing-Masken konzentriert. Und der Grund, warum ich zu dem Schluss gekommen bin, dass es dieselben Symptome gibt, mit oder ohne UIWebView. Und dieses Symptom ist, dass für Portrait alles pfirsichfarben ist. Bei Querformat wird der unterste UIButton hinter der TabBar angezeigt.
Zum Beispiel habe ich in einem UIView von oben nach unten:
UIView - beide Federn eingestellt (Standardfall) und keine Streben
UIScrollView - Wenn ich die beiden Federn setze und alles andere lösche (wie das UIView), dringt der UIButton in das Objekt unmittelbar darüber ein. Wenn ich alles lösche, ist UIButton in Ordnung, aber das Material ganz oben versteckt sich hinter der Statusleiste. Wenn Sie nur die obere Strebe einstellen, wird der UIButton hinter der Tab-Leiste angezeigt.
UILabel und UIImage als nächstes vertikal - oberes Strebenset, überall flexibel
Nur um das Bild für die wenigen zu vervollständigen, die eine UIWebView haben:
UIWebView - Streben: oben, links, rechts Federn: beide
UIButton - nichts festgelegt, dh überall flexibel
Obwohl meine Glühbirne schwach ist, scheint es Hoffnung zu geben.
Bitte nehmen Sie mit, weil ich mehr Platz brauchte, als für einen kurzen Antwortkommentar vorgesehen war.
Vielen Dank, dass Sie versucht haben zu verstehen, wonach ich wirklich fische.
1) Jeder UIViewController (eine TabBar-App) verfügt über ein UIImage, Text und was auch immer. Ein weiterer gemeinsamer Nenner ist ein UIButton auf der Unterseite. Auf einigen UIViewControllern habe ich eine UIWebView über dem UIButton.
Also, UIImage, Text usw. UIWebView (auf EINIGEN) UIButton
Um all das oben Genannte ist eine UIScrollView.
2) Für diejenigen, die eine UIWebView haben, sieht die AutoresizingMask wie folgt aus:
—
|
—
^
|
|
| - | ← ---- → | - | | | V Die Maske des UIButton ist nicht festgelegt, dh überall flexibel
In meinem -viewDidLoad rufe ich meine -repositionSubViews auf, in denen ich Folgendes mache:
Wenn es keine UIWebView gibt, mache ich nichts anderes als den UIButton zu zentrieren, den ich mit IB platziert habe.
Wenn ich eine UIWebView habe, bestimme ich deren * Inhalt * -Höhe und setze ihren Rahmen so, dass er den gesamten Inhalt einschließt.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Sobald ich das mache, drücke ich den UIButton programmgesteuert nach unten, so dass er unter der UIWebView platziert wird.
Alles funktioniert, bis ich es von Porträt zu Landschaft drehe.
Ich rufe meine -repositionSubViews in meiner -didRotateFromInterfaceOrientation auf.
Warum ändert sich die Inhaltshöhe meines UIWebView nicht mit der Drehung?
Von Hochformat zu Querformat sollte die Inhaltsbreite erweitert und die Inhaltshöhe verringert werden. Es funktioniert optisch so, wie es sollte, aber nicht gemäß meinem NSLog.
Wie auch immer, mit oder ohne UIWebView bewegt sich die Schaltfläche, über die ich gesprochen habe, im Querformat unter die TabBar, aber sie wird nicht nach oben gescrollt, um gesehen zu werden. Ich sehe es hinter der TabBar, wenn ich "kräftig" scrolle, aber dann "fällt" es hinter der TabBar zurück.
Unterm Strich ist dies der letzte Grund, warum ich nach der Höhe der TabBar und der Navigationsleiste gefragt habe, da sich die TabBar am unteren Rand der UIView befindet und die Navigationsleiste die UIView nach unten drückt.
Jetzt werde ich hier ein oder zwei Kommentare hinzufügen, weil sie früher keinen Sinn ergeben hätten.
Ohne UIWebView lasse ich alles so, wie es von IB gesehen wird.
Mit einer UIWebView erhöhe ich die Frame.Höhe der UIWebView auf ihre Inhaltshöhe und passe auch die Höhe der umgebenden UIScrollView, die alle Unteransichten umgibt, nach oben an.
Na da hast du es.