2013-04-04 5 views
1

J'utilise QLPreviewController dans mon application et je souhaite masquer la barre d'outils inférieure qui permet de parcourir les éléments de la source de données. Est-il possible de faire quelque chose?QLPreviewController masquer la barre d'outils inférieure

J'ai essayé de le rechercher comme subview de QLPreviewController's view mais il a seulement une sous-vue de classe _UISizeTrackingView. Si je comprends bien, c'est un cours privé, donc je n'ai pas le droit de chercher quelque chose là-bas.

Existe-t-il des moyens de masquer cette barre d'outils et Apple autorise-t-il cela? Je vous remercie.

+1

Avez-vous obtenu une solution pour ça? – Smita

Répondre

1

Après avoir cherché beaucoup de réponses, enfin, j'ai trouvé la solution.Si vous voulez cacher le bottomToolBar tout le temps, vous pouvez le faire en suivant les étapes ci-dessous.

  1. sous-classe d'abord QLPreviewController
  2. Mettre en oeuvre la fonction "getToolBarFromView" pour obtenir le toolBar de QLPreviewController

    - (UIToolbar *)getToolBarFromView:(UIView *)view { 
    // Find the QL ToolBar 
    for (UIView *v in view.subviews) { 
        if ([v isKindOfClass:[UIToolbar class]]) { 
         return (UIToolbar *)v; 
        } else { 
         UIToolbar *toolBar = [self getToolBarFromView:v]; 
         if (toolBar) { 
          return toolBar; 
         } 
        } 
    } 
    return nil; 
    } 
    
  3. Obtenez le toolBar et ajouter un observateur à regarder sa propriété 'Masqué'.

    - (void)viewWillAppear:(BOOL)animated{ 
    
        [super viewWillAppear:animated]; 
        // Get the ToolBar 
        self.qlToolBar = [self getToolBarFromView:self.view]; 
    
        self.qlToolBar.hidden = true; 
        if (self.qlToolBar) { 
         [self.qlToolBar addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionPrior context:nil]; 
        } 
    } 
    
    - (void)viewWillDisappear:(BOOL)animated{ 
    
        [super viewWillDisappear:animated]; 
        [self.navigationController removeObserver:self forKeyPath:@"hidden"]; 
    } 
    
  4. Mettre en œuvre - (void) observeValueForKeyPath: (NSString *) KeyPath ofObject: (id) modification de l'objet: (NSDictionary *) contexte de changement: (void *) contexte méthode

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ 
    
        BOOL isToolBarHidden = self.qlToolBar.hidden; 
        // If the ToolBar is not hidden 
        if (!isToolBarHidden) { 
         dispatch_async(dispatch_get_main_queue(), ^{ 
          self.qlToolBar.hidden = true; 
         }); 
        } 
    } 
    

Et la dernière chose que vous devriez faire est de présenter ce contrôleur à partir de votre propre navigationController.Hope cela fonctionne pour vous!

-3

Il existe une solution plus simple, vous devez modifier une méthode QLPreviewControllerDataSource. Si vous définissez le nombre d'éléments prévisualisés sur 1, la barre d'outils inférieure est automatiquement masquée.

+0

Cela ne semble pas fonctionner dans iOS 10. L'apparence par défaut est d'afficher la barre de navigation et la barre d'outils. –

1

QLPreviewViewController peut avoir plus d'une barre d'outils à l'intérieur. Pour cela, vous devez trouver tous les UIToolbar dans les sous-visuels et les cacher.

De même, vous devez observer la propriété hidden car lorsque l'utilisateur appuie sur QLPreviewViewController, cela modifie la visibilité des barres d'outils et de navigation.

Swift 3:

var toolbars: [UIToolbar] = [] 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    toolbars = findToolbarsInSubviews(forView: view) 
    for toolbar in toolbars { 
     toolbar.isHidden = true 
     toolbar.addObserver(self, forKeyPath: "hidden", options: .new, context: nil) 
    } 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    for toolbar in toolbars { 
     toolbar.removeObserver(self, forKeyPath: "hidden") 
    } 
} 

private func findToolbarsInSubviews(forView view: UIView) -> [UIToolbar] { 
    var toolbars: [UIToolbar] = [] 
    for subview in view.subviews { 
     if subview is UIToolbar { 
      toolbars.append(subview as! UIToolbar) 
     } 
     toolbars.append(contentsOf: findToolbarsInSubviews(forView: subview)) 
    } 
    return toolbars 
} 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if let keyPath = keyPath, 
     let toolbar = object as? UIToolbar, 
     let value = change?[.newKey] as? Bool, 
     keyPath == "hidden" && value == false { 
     toolbar.isHidden = true 
    } 
} 
-1
public override void ViewDidLayoutSubviews() 
     { 
      this.NavigationController.Toolbar.Hidden = true; 

     } 

cela fonctionnera pour vous

-1

sous-classe 1.Premièrement de QLPreviewController

2.coding

(void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.navigationController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     if ([obj isKindOfClass:[UIToolbar class]]) { 
      obj.hidden = YES; 
     } 
    }]; 

    [self.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     if ([obj isKindOfClass:[UIToolbar class]]) { 
      obj.hidden = YES; 
     } 
    }]; 
}