Tengo una aplicación que tiene una pestaña de la barra de & de la barra de navegación para la interacción normal. Uno de mis pantallas es una gran porción de texto, así que permitir que el usuario pulse para ir a la pantalla completa (como el tipo de Fotos.de la aplicación).

La nav bar & ficha de la barra se oculta, y me puse la vista de texto del archivo de imagen a pantalla completa. El problema es que hay acerca de 50px de espacio en blanco donde la barra de pestañas que solía ser. Usted puede ver si a partir de esta captura de pantalla:

eliminado muertos ImageShack enlace

No estoy seguro de lo que está causando esto. El espacio en blanco no es, definitivamente, la visión detrás de la vista de texto, como lo puse de fondo de color rojo sólo para estar seguro. ¿Qué podría estar causando esto?

** ACTUALIZACIÓN **

Hice algún éxito las pruebas en un UIWindow subclase y descubrió que el espacio en blanco es en realidad el indocumentados/inédito UILayoutContainerView. Esta es la vista principal de la tabBar. Yo no creo que sea recomendable para manipular directamente este punto de vista, entonces, ¿cómo puedo ocultar la barra de pestañas?

** ACTUALIZACIÓN # 2 **

He comprobado yo.vista del marco antes de & después de la animación, y es que parece que el padre de la vista no es el cambio de tamaño suficiente.

después de ir a pantalla completa, el punto de vista del marco es sólo 411 píxeles de alto. He intentado jugar con el marco manualmente y también la configuración de autoResizeMask sin suerte.

**** ACTUALIZACIÓN: Aquí está el resultado final ****

- (void)toggleFullscreen {
    isFullScreen = !isFullScreen;  //ivar

    //hide status bar & navigation bar
    [[UIApplication sharedApplication] setStatusBarHidden:isFullScreen animated:YES];
    [self.navigationController setNavigationBarHidden:isFullScreen animated:YES];

    [UIView beginAnimations:@"fullscreen" context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:.3];

    //move tab bar up/down
    CGRect tabBarFrame = self.tabBarController.tabBar.frame;
    int tabBarHeight = tabBarFrame.size.height;
    int offset = isFullScreen ? tabBarHeight : -1 * tabBarHeight;
    int tabBarY = tabBarFrame.origin.y + offset;
    tabBarFrame.origin.y = tabBarY;
    self.tabBarController.tabBar.frame = tabBarFrame;

    //fade it in/out
    self.tabBarController.tabBar.alpha = isFullScreen ? 0 : 1;

    //resize webview to be full screen /normal
    [webView removeFromSuperview];
    if(isFullScreen) {
                //previousTabBarView is an ivar to hang on to the original view...
        previousTabBarView = self.tabBarController.view;
        [self.tabBarController.view addSubview:webView];

        webView.frame = [self getOrientationRect];  //checks orientation to provide the correct rect

    } else {
        [self.view addSubview:webView];
        self.tabBarController.view = previousTabBarView;
    }

    [UIView commitAnimations];
}

(tenga en cuenta que cambié textview para webview, pero igual funciona en el texto original la vista)

  • Su vínculo de la imagen parece haberse roto. Si usted todavía tiene la imagen original, por favor resubir a la pila.imgur, o simplemente editar tu pregunta para hacer el trabajo sin la imagen. Gracias.

15 Comentarios

  1. 29

    He tenido este problema exacto donde estaba la animación de la barra de pestañas y la barra de navegación en la parte inferior y la parte superior de la pantalla, respectivamente, dejando a un 49px de alta el espacio en blanco donde la barra de pestañas se fue.

    Resulta que la razón de mi nuevo «pantalla completa» punto de vista no se realmente llenan el espacio era porque yo era la adición de la vista a pantalla completa como una subvista de la navegación del controlador de vista, que en sí fue un niño de la barra de pestaña controlador.

    Para solucionarlo, simplemente he añadido una nueva vista a pantalla completa (en el caso de la vista con todo el texto) como una subvista de la UITabBarController la vista.

    [[[auto tabBarController] ver] addSubview:yourTextView]; 
    

    Entonces todo lo que usted necesita hacer es asegurarse de que su subvista del marco es de 480 x 320 px y debe llenar la pantalla (incluyendo el área que antes era el misterioso espacio en blanco)

    • este tipo de trabajo, pero no encontré la manera fácil para volver a la vista normal. auto.tabBarController.view = previousView parecía extraño efectos secundarios…
    • Finalmente conseguí este método de trabajo. La rotación de la que realmente hizo de este acto un poco raro, así que acabé la configuración de la vista de la web del marco manualmente cuando en modo de pantalla completa.
    • Uno de los más voto de mi parte 🙂
    • Thnx mucho,para buscar la solución desde el pasado dos días..
  2. 5

    Que sin duda puede hacer algo que parece correcto, cambiando el marco de la vista de que la barra de pestañas es fuera de la pantalla. Sé que alguien menciona tratando de que, y usted dijo que no funcionaba, pero sospecho que el problema es que usted no tiene la textviews cambiar el tamaño de la máscara de la instalación correctamente cuando intentó. A continuación es el código que debe trabajar:

    - (void)viewDidLoad {
      [super viewDidLoad];
      currentlyHidden = NO;
    }
    
    - (void) hideStuff {
      SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate];
      self.navigationController.navigationBarHidden = YES;
    
      CGRect newFrame = appDelegate.tabBarController.view.frame;
      newFrame.size.height += appDelegate.tabBarController.tabBar.frame.size.height;
      appDelegate.tabBarController.view.frame = newFrame;
    }
    
    - (void) showStuff {
      SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate];
    
      CGRect newFrame = appDelegate.tabBarController.view.frame;
      newFrame.size.height -= appDelegate.tabBarController.tabBar.frame.size.height;
      appDelegate.tabBarController.view.frame = newFrame;
    
      self.navigationController.navigationBarHidden = NO;
    }
    
    - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
      if (currentlyHidden) {
        [self showStuff];
        currentlyHidden = NO;
      } else {
        [self hideStuff];
        currentlyHidden = YES;
      }
    }

    Además, puesto que este es, sin duda sensible a cómo usted tienen sus puntas, etc el programa de instalación, soy la publicación de un proyecto en línea para que pueda descargarlo y conseguir una mirada en ella. Es un bonito mínima de demostración, sólo un sistema de Navegación basado en proyecto en el que el delegado establece una ficha controlador y se incrusta el controlador de vista de la principal mina. El resto está en el RootViewController plumilla y la clase. Los bares son ejecutados cada vez que un toque comienza, tan sólo tocar la pantalla. Obviamente, en una aplicación real que usted puede ser que necesite para ajustar el desplazamiento de la vista así las cosas, el contenido no aparece para saltar.

    • He probado tu ejemplo y funcionó, pero por alguna razón era incapaz de traducir en mi aplicación. Parecía que me estaba haciendo la misma cosa, aunque no a través de la aplicación delegado, me hizo ver el auto.tabBarController). Lo que terminó con la adición de la textview para la tabBarController la vista & tamaño de forma manual. En cualquier caso, agradezco la respuesta detallada. Me gustaría poder dar crédito a ambos.
  3. 3

    Ha fijado su punto de vista del controlador de hidesBottomBarWhenPushed propiedad YES? Usted debe establecer en su initWithNibName:bundle: o initWithCoder: método. Cuando se inserta en la nav controlador, esta debe ocultar la barra de pestañas y hacer que el contenido de la vista se extienden hacia abajo a la parte inferior.

    • Que funciona, pero no es el comportamiento que yo quiero. Tengo que ser capaz de ir & fuera de la pantalla completa con un solo toque. Esto funciona para el nav/barras de estado, pero no para la barra de pestañas.
  4. 2

    Tal vez hay otro punto de vista que es un built-en la parte de la barra de pestañas de la zona? Es decir, algo más que ocultar. Esto le ayudará a ver lo que ve a su alrededor.

    for (UIView *viewy in [self.navigationController.view subviews])
    {
        NSLog([viewy description]);
    }
    • Los puntos de vista: <UINavigationTransitionView: 0xd2c6f0; frame = (0 0; 320 431); clipsToBounds = SÍ; autoresize = W+H; capa = <CALayer: 0xd2bf90>> <UINavigationBar: 0xd1f010; frame = (0 20; 320 44); clipsToBounds = SÍ; la opacidad = NO; autoresize = W; capa = <CALayer: 0xd1f060>> <UITransitionView: 0xd19050; frame = (0 0; 320 431); clipsToBounds = SÍ; autoresize = W+H; capa = <CALayer: 0xd18a80>> <UITabBar: 0xd1f980; frame = (0 431; 320 49); autoresize = W+TM, capa = <CALayer: 0xd1f520>> (esto demuestra tanto navigationController subvistas y tabBarController subvistas)
    • Esto me dio una idea para hacer un éxito de la prueba en la región en blanco & ver ver lo que ocurrió. He actualizado a la pregunta con más detalles.
  5. 2

    He encontrado que si usted marca la nueva vista de la empujando hacia la pila de navegación con la siguiente línea oculta la barra de pestañas como el tiempo que está en la pila.

    scrollViewController.hidesBottomBarWhenPushed = YES;

  6. 1

    Creo que el problema es que todavía estás en la ficha de la barra de controlador, me he encontrado un par de problemas con esto así, y acabó creando dos puntos de vista para mi aplicación delegado para el control, la barra de pestaña controlador , y una zona de uiview que tenga algo que la pestaña de la barra de controlador intenta tomar el mando de. Usted puede pasar su vista a la aplicación de delegado y utilizarlo tal vez?

    • No estoy seguro de que me siga… estás diciendo que cuando me vaya de pantalla completa para el uso de un punto de vista diferente por completo? He intentado añadir la vista directamente a la UIWindow, y se ve bien, pero la experiencia es bastante peculiar al girar. No estoy seguro de que quiero ir a esta ruta.
  7. 1

    Tratar de hacer la TabBarControllers sean más grandes que la pantalla, de manera que la pestaña de la barra se oculta fuera de la pantalla, siempre que ello antes de la nueva ViewController se establece, a continuación, su opinión cambiará de tamaño para rellenar el nuevo marco!

    En mis pruebas he utilizado el tabBarController:shouldSelectViewController: delegado método para comprobar que la vista controlador está a punto de convertirse actual y establecer el TabBarController.vista.marco en consecuencia. Por ejemplo:

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        if( viewController == second)
            tabBarController.view.frame = CGRectMake( 0, 20, 320, 500);
        else
            tabBarController.view.frame = CGRectMake( 0, 20, 320, 460);
    }

    Si esto aún no es exactamente lo que usted necesita, pruebe a buscar en la hidesBottomBarWhenPushed propiedad de UIViewController. Cuando se establece en sí, esto hará que la parte inferior de la barra de ocultar si el Controlador está inserta en una pila de Navegación.

  8. 1

    Me gustaría mover la vista a la ventana cuando usted decide ir a pantalla completa. por ejemplo,

    myView = [self.view retain];
    self.view = nil;
    [window addSubview:myView];

    y para volver atrás:

    [myView removeFromSuperView];
    self.view = myView;
    [myView release];
    myView = nil;

    Mediante la adición de la vista como un niño de la ventana, puede ser totalmente completa y estarán en la parte superior de la barra de pestañas.

    A continuación, puede combinar esto con

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

    para detectar la rotación. (Creo que te combine esto con la vista.transformar = CGAffineTransformMakeRotation para hacerla girar…?)

    • algunos consejos para conseguir la rotación de trabajar cuando tengo que hacer esto? No parece llamar a mi shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)la orientación del método si puedo hacer esto.
    • Puede utilizar la solución actual combinado con: [[UIDevice currentDevice] beginGeneratingDeviceOrientationnotifications]; [[NSNotificationCenter defaultCenter] addObserver:auto selector:@selector(didRotate:) nombre:@»UIDeviceOrientationDidChangeNotification» objeto:nil]; para detectar la rotación. (Creo que te combine esto con la vista.transformar = CGAffineTransformMakeRotation para hacerla girar…?) Usted podría llamar a su shouldAutorotateToInterface… función de la didRotate: función para ver si debe hacerlo, también.
    • He editado mi respuesta a agregar en el rough de la rotación de la solución.
  9. 1

    Tuve problema similar. Como Harry mencionó que es una razón de Navegación Controlador interno del controlador de la Barra de Pestaña Controlador. Encontrado otra manera de cómo cambia el look de tu vista y marco correcto., En su controlador de añadir lo siguiente:

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
    
        //Here you can make your tabBarControlelr.view.hidde = true or use any animation that hides UITabBar. I made
        [TabBarController setTabBarHidden:YES];
    
        self.navigationController.view.frame = CGRectMake(self.navigationController.view.frame.origin.x, self.navigationController.view.frame.origin.y, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height + 50);
        [self.navigationController.view setNeedsLayout];
    
     }

    Y he aquí cómo ocultarlo. Puedo hacerlo directamente método de llamada de TabBarControlelr o método de la clase contenedora:

    + (void)setTabBarHidden:(BOOL)hidden
    {
        AppDelegate *delegate = [UIApplication sharedApplication].delegate;
        TabBarController *tabBarController = (TabBarController *) delegate.window.rootViewController;
    
        if ([tabBarController isKindOfClass:[TabBarController class]]) {
            [tabBarController setTabBarHidden:hidden];
        }
    }
    
    
    - (void)setTabBarHidden:(BOOL)hidden
    {
        if (self.tabBar.hidden == hidden) {
            return;
        }
    
        if (hidden == NO) {
            self.tabBar.hidden = hidden;
        }
    
        [UIView animateWithDuration:0.15 animations:^{
            self.tabBar.frame = CGRectOffset(self.tabBar.frame, 0, ( hidden ? 50 : -50 ));
        } completion:^(BOOL finished) {
            self.tabBar.hidden = hidden;
        }];
    }
  10. 0

    Si usted está usando la Interfaz del Generador, asegúrese de autoresizing está configurado correctamente en el Tamaño del Inspector.
    Si la creación de la UITextView en el código, asegúrese de que establece el marco para ser lo suficientemente grande y que el punto de vista del padre (y del padre) también son lo suficientemente grandes. Por simplicidad, añadir la vista a la ventana directamente, y luego se mueven hacia adentro a partir de ahí.

    Para mover una vista a su superview:

    - (void)moveViewToSuperview:(UIView *)view
    {
        UIView *newSuperview = [[view superview] superview];
        [view removeFromSuperview];
        [newSuperview addSubview:view];
        [newSuperview bringSubviewToFront:view];
    }
    • De tamaño automático es W+H. textView.frame = CGRectMake(0,0, 320, 700); parece no tener efecto en él.
    • Si puedo quitar el textview de la vista y, a continuación, agregarlo directamente a la ventana, a continuación, se va a pantalla completa. Esto ha raro auto-rotación de efectos aunque, por lo que yo no puedo salir de esta manera. Esto parece indicar que algo es la oclusión de la vista de texto.
    • Intente esto: el Retorno de su UITextView a su ubicación original en el Interface Builder. Agregue una llamada a moveViewToSuperview:myTextView justo después de la vista se convierte en visible ejecutar la aplicación. Prueba a ver si es oscurecida. Si no, añadir otra llamada y depuración de nuevo. Enjuaga y repite el proceso. Que debe ayudarle a averiguar «cómo muchos niveles» el punto de vista que es el bloqueo de la vista de texto es.
  11. 0

    Ha intentado forzar el texto para «re-escribir» en sí mismo (restablecimiento de la .el texto de la propiedad de cualquier objeto que esté usando)? He tenido muchos casos donde las vistas simplemente no vuelva a comprobar o repintar sus datos, y obligando parece ser la única revisión. Si esta no es buena desde el punto de vista de la experiencia de usuario, usted podría tratar de hacer la nav/tabbars transparente después de que el usuario toca, y antes de que desaparezcan. Esto normalmente se extiende la vista para ver el tamaño completo de la pantalla.

    • Si puedo hacer que la barra de estado transparente & utilizar el setWantsFullScreenLayout de propiedad en SÍ, a continuación, se hace por la parte superior, pero no a la parte inferior de la barra de pestañas.
  12. 0

    Si el UITabBarController es empujado por un rootViewController (navigationController). Usted puede tratar el siguiente:

    Primera ocultar la Barra de estado /de la Barra de pestañas;

    [self.navigationController pushViewController:aBlankViewController animated:NO];
    [self.navigationController popViewControllerAnimated:NO];

    Usted debe ser capaz de recuperar el espacio en blanco, a pesar de que la pantalla se descarga durante el ajuste de la…

  13. 0

    He experimentado un problema similar, esta discusión fue útil: UIWebView en el iPad de tamaño

    Tony‘s respuesta me ayudó a descubrir que, cuando se crea una subvista es útil para la instalación de código similar a este:

    self.tabBarController.tabBar.frame = self.view.bounds;
  14. 0

    Poner el código en un prepararse para la transición como esta, funciona a la perfección para mí:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
    if ([[segue identifier] isEqualToString:@"ViewPhoto"]) {
    
        ImageView *vc = [segue destinationViewController];
    
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];
    
            NSString *Title = [photoNames objectAtIndex:selectedIndex];
            [vc setSelectedTitle:[NSString stringWithFormat:@"%@", Title]];
    
            vc.hidesBottomBarWhenPushed = YES;
    
            }
        }
  15. -1

    Añadir la amt de espacio a la dimensión de la vista, así que si era rectángulo CGRectMake(0,0,320,460) hacer CGRectMake(0,0,320,480)… Esto me ha pasado a mí, Im n ot exactamente seguro de por qué, podría tomarse a hacer con el concepto subyacente de que usted está poniendo su vista de texto en la parte superior, pero sólo la adición de la dimensión debería hacerlo

    • esto no tiene ningún efecto.

Dejar respuesta

Please enter your comment!
Please enter your name here