Pregunta

He establecido el color personalizado en la barra de navegación de QlpreviewController, pero el problema es que quiero un color oscuro de la barra de navegación en QlpreviewController, incluso he establecido la propiedad translúcida de la barra de navegación en no, pero no sé por qué no funciona

Lo quiero como la imagen de abajo.

enter image description here

pero se muestra como esta imagen

enter image description here

QLPreviewController *previewer = [[QLPreviewController alloc] init];
// Set data source
[previewer setDataSource:self];
[previewer setDelegate:self];
// Which item to preview
[previewer setCurrentPreviewItemIndex:index];
[previewer.view addGestureRecognizer:singleTap];
previewer.navigationController.navigationBar.translucent = NO;
previewer.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent=NO;
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
   [self.navigationController pushViewController:previewer animated:TRUE ];

Incluso yo también lo he intentado así pero tampoco funciona.

    - (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
{
// Break the path into it's components (filename and extension)
// Use the filename (index 0) and the extension (index 1) to get path
//lblFileName.text=[strFileName stringByReplacingOccurrencesOfString:@"movefile" withString:@""];

// For navigation bar color and text attributes of navigation bar
for (id object in controller.childViewControllers)
{
    if ([object isKindOfClass:[UINavigationController class]])
    {
        UINavigationController *navController = object;
        navController.navigationBar.translucent=NO;
        navController.navigationBar.barTintColor = [UIColor redColor];;
        navController.toolbar.translucent=NO;
        navController.toolbar.barTintColor=[UIColor redColor];;
        [navController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName, nil]];


    }
}

   NSString *strFilename=[[NSBundle mainBundle]pathForResource:@"final" ofType:@"png"];

return [NSURL fileURLWithPath:strFilename];
}

Por favor sugiéreme a dónde me estoy equivocando gracias de antemano

¿Fue útil?

Solución

El problema principal es que cuando intenta configurar la translucidez de la barra de navegación, aún no ha presionado el controlador de vista previa en la pila de navegación todavía. En este punto, el controlador de vista previa se asigna e instanciada, pero su vista no se ha cargado ni agregado a la jerarquía de la vista, y el valor del previewer.navigationController es nulo. El valor del self.navigationController es no nil en este punto, pero la propiedad de translucencia que establece aquí se sobrescribirá como un efecto secundario de empujar el controlador de vista previa. La forma más fácil de obtener el efecto que desea, es cambiar el orden de las declaraciones, como esta:

[self.navigationController pushViewController:previewer animated:YES];
self.navigationController.navigationBar.translucent = NO;

Tenga en cuenta que con la translucidez de la barra de navegación establecida a NO, el contenido previsualizado se iniciará debajo de la barra de navegación, que probablemente no sea lo que desea. La forma más fácil de trabajar alrededor de ese problema, es establecer la propiedad de translucencia después de La vista del controlador de vista previa ha aparecido en la pantalla. Puedes hacer esto por Subclassing QLPreviewController:

@interface PreviewController : QLPreviewController

@end

@implementation PreviewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    self.navigationController.navigationBar.translucent = NO;
}

Tenga en cuenta que las cosas se complican más cuando presenta el controlador de vista previa modalmente (en lugar de presionarlo en una pila de navegación). En ese caso, no hay un controlador de navegación disponible para acceder a la barra de navegación y debe confiar en la jerarquía de vista interna del QLPREViewController. El siguiente código funciona en iOS7, pero podría romperse en una versión posterior:

[self presentViewController:previewController animated:YES completion:^{

    UIView *view = [[[previewController.view.subviews lastObject] subviews] lastObject];
    if ([view isKindOfClass:[UINavigationBar class]])
    {
        ((UINavigationBar *)view).translucent = NO;
    }

}];

Otros consejos

No hay necesidad de subclasificación.prueba esto:

 QLPreviewController * ql = [[QLPreviewController alloc] init];
...
[self showViewController:ql sender:self];
ql.navigationController.navigationBar.translucent = NO;
ql.edgesForExtendedLayout = UIRectEdgeNone;

Si desea presentarlo modalmente, simplemente coloque el Controlador de vista previa en un controlador de navegación:

UINavigationController * navi = [[UINavigationController alloc] initWithRootViewController:ql];
        ql.navigationController.navigationBar.translucent = NO;
        ql.edgesForExtendedLayout = UIRectEdgeNone;

        [self presentViewController:navi animated:YES completion:nil];

En lugar de usar QLPREViewController, y no usa WebView para cargar el PDF.pero si carga PDF en WebView, debe personalizar los botones que, también se parece muy similar a QLPREViewController.

 NSURL *targetURL = [NSURL fileURLWithPath:path_pdf]; //path_pdf is pdf's path 
 NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
 [webview_pdf loadRequest:request];

Bueno, inténtalo una vez.

Si aún así, alguien quiere personalizar la barra de navegación de QLPreviewController entonces pueden intentar crear un UIViewController y personalizarlo según los requisitos y luego crear QLPreviewController objeto y agréguelo como controlador de vista secundario.

Esto le permitirá deshacerse del botón de compartir y personalizar el color de la barra de navegación, etc.Esto es trabajo para mí.

Para saber cómo agregar un controlador de vista infantil, puede consultar este

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top