So che la presenza di più controller di visualizzazione (barra di navigazione) spinge l'UIView per altezza. So anche che questa altezza = 44px. Ho anche scoperto che questo push down mantiene il [self.view].frame.origin.y = 0
.
Quindi, come faccio a determinare l'altezza di questa barra di navigazione, oltre a impostarla su una costante?
Oppure, versione più breve, come posso determinare se il mio UIView viene visualizzato con la barra di navigazione in alto?
La lampadina ha iniziato ad accendersi. Sfortunatamente, non ho scoperto un modo uniforme per correggere il problema, come descritto di seguito.
Credo che tutto il mio problema sia incentrato sui miei autoresizingMasks. E il motivo per cui ho concluso che esistono gli stessi sintomi, con o senza UIWebView. E quel sintomo è che tutto è perfetto per Portrait. Per Orizzontale, il pulsante UIB più in basso si apre dietro la TabBar.
Ad esempio, su un UIView, ho, dall'alto verso il basso:
Vista UIV - entrambe le molle impostate (caso predefinito) e nessun puntone
UIScrollView - Se imposto le due molle e pulisco tutto il resto (come l'UIView), il pulsante UIB si intromette nell'oggetto immediatamente sopra di esso. Se elimino tutto, UIButton è OK, ma le cose in cima si nascondono dietro la StatusBar Impostando solo il montante superiore, l'UIButton si apre dietro la barra delle schede.
UILabel e UIImage si avvicinano verticalmente: set di montanti superiori, flessibile ovunque
Solo per completare l'immagine per i pochi che hanno un UIWebView:
UIWebView - Puntoni: in alto, a sinistra, a destra Molle: entrambe
UIButton: niente di fisso, cioè flessibile ovunque
Sebbene la mia lampadina sia fioca, sembra esserci speranza.
Ti prego, abbi pazienza perché avevo bisogno di più spazio di quello previsto per un breve commento di risposta.
Grazie per aver cercato di capire cosa sto veramente pescando ... quindi ecco qui.
1) Ogni UIViewController (un'app TabBar) ha un UIImage, del testo e quant'altro in cima. Un altro comune denominatore è un UIButton in basso. Su alcuni UIViewController ho un UIWebView sopra l'UIButton.
Quindi, UIImage, testo ecc. UIWebView (su ALCUNI) UIButton
Che circonda tutto quanto sopra è un UIScrollView.
2) Per quelli che hanno un UIWebView, la sua maschera di ridimensionamento automatico è simile a:
—
|
—
^
|
|
| - | ← ---- → | - | | | V La maschera di UIButton non ha nulla da impostare, cioè flessibile ovunque
All'interno di my -viewDidLoad, chiamo my -repositionSubViews in cui eseguo le seguenti operazioni:
Se non c'è UIWebView, non faccio altro che centrare il pulsante UIB che ho inserito con IB.
Se ho un UIWebView, allora ne determina l'altezza * contenuto * e imposto la cornice per racchiudere l'intero contenuto.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Una volta che lo faccio, spingo programmaticamente il pulsante UIB verso il basso in modo che finisca posizionato sotto UIWebView.
Tutto funziona, fino a quando non lo giro da Ritratto a Paesaggio.
Chiamo my -repositionSubViews all'interno di -didRotateFromInterfaceOrientation.
Perché l'altezza del contenuto di UIWebView non cambia con la rotazione?
Da Verticale a Orizzontale, la larghezza del contenuto dovrebbe espandersi e l'altezza del contenuto dovrebbe ridursi. Lo fa visivamente come dovrebbe, ma non secondo il mio NSLog.
Ad ogni modo, con o senza UIWebView, il pulsante di cui ho parlato si sposta sotto la Tabbar in modalità orizzontale ma non scorrerà verso l'alto per essere visto. Lo vedo dietro il Tabbar quando scorro "vigorosamente", ma poi "ricade" dietro il Tabbar.
In conclusione, quest'ultima è la ragione per cui ho chiesto l'altezza del TabBar e del NavigationBar perché il TabBar si posiziona nella parte inferiore dell'UIView e il NavigationBar spinge l'UIView verso il basso.
Ora aggiungerò un commento o due qui perché non avrebbero avuto senso prima.
Senza UIWebView, lascio tutto come visto da IB.
Con un UIWebView, ingrandisco il frame di UIWebView.Altezza al suo contenutoAltezza e regola anche verso l'alto l'altezza del UIScrollView circostante che circonda tutte le viste secondarie.
Beh, il gioco è fatto.