QLPreviewController隐藏底部工具栏

我在我的应用程序中使用QLPreviewController ,并希望隐藏允许移动它的数据源项目的底部工具栏。 是否有可能做某事?

我试图将其作为QLPreviewController's viewsubview进行search,但它只有_UISizeTrackingView类的一个子视图。 据我了解这是一个私人课,所以我没有权利去找那里的东西。

有什么办法可以隐藏这个工具栏吗?苹果允许这样做吗? 谢谢。

找了很多答案后,终于find了解决办法。如果想一直隐藏bottomToolBar,可以按照下面的步骤来做。

  1. QLPreviewController的第一个子类
  2. 实现“getToolBarFromView”函数来获取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. 获取工具栏并添加观察者来观察其“隐藏”属性。

     - (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. 实现 – (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)对象更改:(NSDictionary *)更改上下文:(void *)上下文方法

     - (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; }); } } 

最后,你应该做的是从你自己的navigationController.Hope它呈现这个控制器适合你!

QLPreviewViewController可以有1个以上的工具栏。 这就是为什么你需要在子视图中find所有UIToolbar并隐藏它们。

您也需要观察hidden属性的更改,因为当用户点击QLPreviewViewController它会改变工具栏和导航栏的可见性。

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 } } 
 public override void ViewDidLayoutSubviews() { this.NavigationController.Toolbar.Hidden = true; } 

这将工作肯定

1.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; } }]; } 

有一个更简单的解决scheme,你必须改变一个QLPreviewControllerDataSource方法。

 func numberOfPreviewItemsInPreviewController(controller: QLPreviewController) -> Int { return 1 } 

将预览项目的数量设置为1将自动隐藏底部工具栏。