2013-04-04 165 views
1

我在我的應用程序中使用QLPreviewController,並希望隱藏允許移動其數據源項目的底部工具欄。是否有可能做某事?QLPreviewController隱藏底部工具欄

我試圖搜索它作爲QLPreviewController's viewsubview,但它只有一個_UISizeTrackingView類的子視圖。據我瞭解這是一個私人課,所以我沒有權利去尋找那裏的東西。

有沒有什麼辦法可以隱藏這個工具欄,蘋果是否允許這樣做?謝謝。

+1

你得到任何解決方案爲了這? – Smita 2014-10-06 06:06:46

回答

1

尋找了很多答案後,終於找到了解決方案。如果您想一直隱藏bottomToolBar,可以按照以下步驟操作。 QLPreviewController的

  • 實施「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; 
    } 
    
  • 的工具欄

    1. 第一子獲取工具欄,並添加一個觀察者觀看其「隱藏」屬性。

      - (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"]; 
      } 
      
    2. 實現 - (無效)observeValueForKeyPath:(的NSString *)的keyPath ofObject:(ID)對象變化:(的NSDictionary *)變化上下文:(無效*)上下文 方法

      - (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它適用於你呈現這個控制器!

  • -3

    有一個更簡單的解決方案,您必須更改QLPreviewControllerDataSource方法。

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

    將預覽項目的數量設置爲1將自動隱藏底部工具欄。

    +0

    這似乎不適用於iOS 10.默認外觀是顯示導航欄和工具欄。 – 2017-01-28 11:12:27

    1

    QLPreviewViewController裏面可以有1個以上的工具欄。這就是爲什麼你需要在子視圖中找到所有UIToolbar並隱藏它們。

    此外,您還需要注意更改hidden屬性,因爲當用戶點擊QLPreviewViewController時,它會更改工具欄和導航欄的可見性。

    斯威夫特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; 
    
         } 
    

    這會爲QLPreviewController

    的肯定

    -1

    1.首先子類工作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; 
         } 
        }]; 
    }