Eu sei que a presença do controlador de mais view (barra de navegação) empurra o UIView pela sua altura. Eu também sei que essa altura = 44px. Eu também descobri que esse push down mantém o [self.view].frame.origin.y = 0
.
Então, como eu determino a altura dessa barra de navegação, além de configurá-la para uma constante?
Ou, versão mais curta, como determino que meu UIView está sendo exibido com a barra de navegação na parte superior?
A lâmpada começou a acender. Infelizmente, não descobri uma maneira uniforme de corrigir o problema, conforme descrito abaixo.
Acredito que todo o meu problema esteja centrado nas minhas autoresizingMasks. E a razão pela qual concluí que existem os mesmos sintomas, com ou sem um UIWebView. E esse sintoma é que tudo é pêssego para o Portrait. Para Paisagem, o UIButton mais abaixo aparece atrás da TabBar.
Por exemplo, em um UIView, eu tenho, de cima para baixo:
UIView - ambas as molas definidas (caso padrão) e sem suportes
UIScrollView - Se eu definir as duas molas e limpar tudo o resto (como o UIView), o UIButton entrará no objeto imediatamente acima dele. Se eu limpar tudo, o UIButton está OK, mas as coisas na parte superior se escondem atrás da Configuração da barra de status, apenas a parte superior, o UIButton aparece atrás da barra de guias.
UILabel e UIImage a seguir na vertical - conjunto superior de suporte, flexível em qualquer outro lugar
Apenas para concluir a imagem para os poucos que têm um UIWebView:
UIWebView - Struts: superior, esquerda, direita Molas: ambas
UIButton - nada definido, ou seja, flexível em qualquer lugar
Embora minha lâmpada esteja fraca, parece haver esperança.
Por favor, tenha paciência comigo, porque eu precisava de mais espaço do que o previsto para uma resposta curta.
Obrigado por tentar entender o que eu realmente estou pescando ... então aqui vai.
1) Cada UIViewController (um aplicativo TabBar) possui uma UIImage, algum texto e o que estiver no topo. Outro denominador comum é um UIButton na parte inferior. Em alguns dos UIViewControllers, tenho um UIWebView acima do UIButton.
Então, UIImage, texto etc. UIWebView (em ALGUNS) UIButton
Ao redor de todo o exposto, há um UIScrollView.
2) Para aqueles que possuem um UIWebView, seu autoresizingMask se parece com:
—
|
—
^
|
|
| - | ← ---- → | - | | | V A máscara do UIButton não tem nada definido, ou seja, flexível em qualquer lugar
No meu -viewDidLoad, chamo meu -repositionSubViews no qual faço o seguinte:
Se não houver UIWebView, não faço nada, exceto centralizar o UIButton que coloquei com o IB.
Se eu tiver um UIWebView, determinarei sua altura * content * e defino seu quadro para incluir todo o conteúdo.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Depois de fazer isso, empurro programaticamente o UIButton para baixo, para que ele fique abaixo do UIWebView.
Tudo funciona, até eu girá-lo de Retrato para Paisagem.
Eu chamo meu -repositionSubViews dentro do meu -didRotateFromInterfaceOrientation.
Por que a altura do conteúdo do meu UIWebView não muda com a rotação?
De Retrato para Paisagem, a largura do conteúdo deve expandir e a altura do conteúdo deve diminuir. Faz visualmente como deveria, mas não de acordo com o meu NSLog.
De qualquer forma, com ou sem um UIWebView, o botão sobre o qual eu falei se move abaixo da Barra de Tabulação no modo Paisagem, mas ele não rola para cima para ser visto. Eu o vejo por trás da TabBar quando rolar "vigorosamente", mas depois "retrocede" por trás da TabBar.
Resumindo, esse último é o motivo pelo qual perguntei sobre a altura do TabBar e do NavigationBar porque o TabBar se planta na parte inferior do UIView e o NavigationBar empurra o UIView para baixo.
Agora, adicionarei um ou dois comentários aqui, porque eles não teriam sentido antes.
Sem o UIWebView, deixo tudo como é visto pelo IB.
Com um UIWebView, aumento o frame.height do UIWebView para o contentHeight e também ajusto a altura do UIScrollView circundante que envolve todas as sub-visualizações.
Bem, aí está.