Sé que la presencia del controlador más vista (barra de navegación) empuja hacia abajo la UIView por su altura. También sé que esta altura = 44px. También he descubierto que este empuje hacia abajo mantiene el [self.view].frame.origin.y = 0
.
Entonces, ¿cómo determino la altura de esta barra de navegación, además de establecerla en una constante?
O, en una versión más corta, ¿cómo determino que mi UIView se muestra con la barra de navegación en la parte superior?
La bombilla comenzó a encenderse. Desafortunadamente, no he descubierto una forma uniforme de corregir el problema, como se describe a continuación.
Creo que todo mi problema se centra en mis autoresizingMasks. Y la razón por la que he concluido es que existen los mismos síntomas, con o sin UIWebView. Y ese síntoma es que todo es color de rosa para Portrait. Para Landscape, el UIButton más inferior aparece detrás de TabBar.
Por ejemplo, en una UIView, tengo, de arriba a abajo:
UIView: conjunto de muelles (caso predeterminado) y sin puntales
UIScrollView: si configuro los dos resortes y borro todo lo demás (como el UIView), el UIButton se entromete en el objeto que se encuentra inmediatamente encima de él. Si borro todo, UIButton está bien, pero las cosas en la parte superior se esconden detrás de la barra de estado. Configurando solo el puntal superior, el UIButton aparece detrás de la barra de pestañas.
UILabel y UIImage son los siguientes verticalmente: conjunto de puntal superior, flexible en cualquier otro lugar
Solo para completar la imagen para los pocos que tienen un UIWebView:
UIWebView - Struts: arriba, izquierda, derecha Resortes: ambos
UIButton: nada configurado, es decir, flexible en todas partes
Aunque mi bombilla es tenue, parece haber esperanza.
Por favor, tengan paciencia conmigo porque necesitaba más espacio que el previsto para un breve comentario de respuesta.
Gracias por tratar de entender lo que realmente estoy pescando ... así que aquí va.
1) Cada UIViewController (una aplicación TabBar) tiene un UIImage, algo de texto y lo que sea en la parte superior. Otro denominador común es un UIButton en la parte inferior. En algunos de los UIViewControllers tengo un UIWebView sobre el UIButton.
Entonces, UIImage, texto, etc. UIWebView (en ALGUNOS) UIButton
Alrededor de todo lo anterior hay un UIScrollView.
2) Para aquellos que tienen un UIWebView, su autoresizingMask se ve así:
—
|
—
^
|
|
| - | ← ---- → | - | El | El | V La máscara de UIButton no tiene nada establecido, es decir, es flexible en todas partes
Dentro de mi -viewDidLoad, llamo a mi -repositionSubViews dentro de la cual hago lo siguiente:
Si no hay UIWebView, no hago nada excepto centrar el UIButton que coloqué con IB.
Si tengo un UIWebView, entonces determino su * contenido * Altura y establezco su marco para encerrar todo el contenido.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Una vez que hago eso, presiono programáticamente el botón UIB hacia abajo para que termine colocado debajo de UIWebView.
Todo funciona, hasta que lo gire de vertical a horizontal.
Llamo a mi -repositionSubViews dentro de mi -didRotateFromInterfaceOrientation.
¿Por qué la altura del contenido de mi UIWebView no cambia con la rotación?
De vertical a horizontal, el ancho del contenido debe expandirse y la altura del contenido debe reducirse. Lo hace visualmente como debería, pero no según mi NSLog.
De todos modos, con o sin UIWebView, el botón del que hablé se mueve debajo de la barra de pestañas cuando está en modo horizontal, pero no se desplazará hacia arriba para ser visto. Lo veo detrás de la TabBar cuando me desplazo "vigorosamente", pero luego "retrocede" detrás de la TabBar.
En pocas palabras, esta última es la razón por la que he preguntado sobre la altura de TabBar y NavigationBar porque TabBar se planta en la parte inferior de UIView y NavigationBar empuja a UIView hacia abajo.
Ahora, voy a agregar un comentario o dos aquí porque no tendrían sentido antes.
Sin UIWebView, dejo todo tal como lo ve IB.
Con un UIWebView, aumento el marco de UIWebView.height a su contentHeight y también ajusto hacia arriba la altura del UIScrollView circundante que rodea todas las sub-vistas.
Bueno, ahí lo tienes.