9

Tengo un problema con la pantalla de mi popover. Después de initWithContentViewController: y presentPopoverFromBarButtonItem:permittedArrowDirections:animated:, corta las esquinas de la barra de navegación. ¿Cómo debería arreglarlo? Gracias.UIPopoverController y UINavigationController corta esquinas

Clipping corners of navigation bar

Este es el código que estoy usando

NavContr *nav = [NavContr new]; 
    nav.navigationBar.backgroundColor = [UIColor redColor]; 
    UIPopoverController *tempPop = [[UIPopoverController alloc] initWithContentViewController:nav]; 
    [tempPop presentPopoverFromBarButtonItem:mainButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 

EDIT: He resuelto este problema:

+ (void)configure:(UINavigationController *)navController { 
    UINavigationBar *navigationBar = navController.navigationBar;  
    UIView *contentView = nil; 

    for (UIView *view in navController.view.subviews) { 
     if ([[NSString stringWithFormat:@"%@", [view class]] isEqualToString:@"UILayoutContainerView"]) 
      contentView = view; 
    } 

    // setting frame to navigation bar and content view 
    [navigationBar setFrame:CGRectMake(navigationBar.frame.origin.x, 0, navigationBar.frame.size.width, navigationBar.frame.size.height)]; 
    [contentView setFrame:CGRectMake(contentView.frame.origin.x, 0, contentView.frame.size.width, contentView.frame.size.height + navigationBar.frame.size.height)]; 

    [navController.view bringSubviewToFront:contentView]; 

    for (UIView *customView in contentView.subviews) 
     customView.frame = CGRectMake(customView.frame.origin.x, customView.frame.origin.y + navigationBar.frame.size.height, customView.frame.size.width, customView.frame.size.height); 

    [contentView addSubview:navigationBar]; 
    [contentView bringSubviewToFront:navigationBar]; 
} 
+0

Dale favor código completo generar UIPopoverController – Injectios

+0

Trate de añadir un poco de viewController a su controlador de navegación – Injectios

+0

No se puede cambiar esta funcionalidad. Puede haber algunos medios no documentados para hacerlo, pero existe la posibilidad de que Apple lo rechace. – RLH

Respuesta

10

Esto es probablemente debido a que no tiene un controlador de vista de la raíz, o está jugando con el controlador de navegación de alguna manera con la que no debe ser reproducido. Así es como se debe a configurar el popover:

MyCustomViewController *viewController = [[UIViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil]; //or storyboard or whatever 
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; //you should have a root view controller before displaying the popover 
tintColor = [UIColor redColor]; 
UIPopoverController *tempPop = [[UIPopoverController alloc] initWithContentViewController:nav]; 
[tempPop presentPopoverFromBarButtonItem:mainButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 

Hay algunas cosas muy importantes que hacer aquí:

  • Su controlador de navegación debe tener un controlador de vista raíz antes de que aparezca.
  • Este código está utilizando una instancia estándar UINavigationController. De acuerdo con el documentation, no debe subclasificar UINavigationController, ni debe intentar reinventar la rueda. Apple ha creado un marco complejo e integral, UIKit, que puede usar para crear aplicaciones asombrosas. Si intenta salir de la caja, creará muchísimo trabajo sin ningún beneficio apreciable.
  • Esto está utilizando la propiedad tintColor de la clase UINavigationBar. Si el matiz no es suficiente para su UI, también puede configurar la imagen de fondo manualmente (consulte docs).

Si desea hacer un popover con un controlador de navegación, use la clase incorporada UINavigationController. No lo subclases y no lo reinventes. Para personalizar la apariencia del navigationBar, use los métodos UI_APPEARANCE_SELECTOR en la clase UINavigationBar.

0

enter image description here

He tratado & replicar el problema que está enfrentando, hecho algunos R & D. Es debido a la línea de código a continuación:

nav.navigationBar.backgroundColor = [UIColor redColor]; 

Mientras se establece el color de fondo de la barra de navegación se comportará raro debido a la forma natural de la surgir. Intenta eliminar la siguiente línea, definitivamente tendrás un problema resuelto.

+0

Ya tengo UINavigationController – LightNight

0

Si está especificando el Rect donde aparece el popover, hemos encontrado que el uso de decimales puede dar lugar a distorsiones extrañas como esa. Asegúrate de estar usando números enteros para el origen y el tamaño.

3

consigo la solución antes de añadir CALayer la UIPopOverController muestra como rounded
después de añadir debajo de las líneas en la clase de vista de tabla consigo el UIPopOverController siguiente

#import <QuartzCore/QuartzCore.h> 

CALayer *imageLayer2 = self.tableView.layer; 
[imageLayer2 setCornerRadius:-20]; 
[imageLayer2 setBorderWidth:1]; 

non rounded

probarlo en su proyecto puede ser que funcione !!
Gracias

Cuestiones relacionadas