3

アプリで使用QLPreviewControllerしていて、データソース項目を移動できる下部ツールバーを非表示にしたいと考えています。どうにかすることは可能ですか?

subviewofとして検索しようとしましたが、 classQLPreviewController's viewのサブビューが 1 つしかありません。_UISizeTrackingView私が理解しているように、それはプライベートクラスなので、そこで何かを探す権利はありません。

このツールバーを非表示にする方法はありますか? Apple はそれを許可していますか? ありがとうございました。

4

5 に答える 5

1

たくさんの答えを探した後、最終的に解決策を見つけました。bottomToolBar を常に非表示にしたい場合は、以下の手順に従ってください。

  1. QLPreviewController の最初のサブクラス
  2. QLPreviewControllerのtoolBarを取得する「getToolBarFromView」関数を実装する

    - (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. ツールバーを取得し、その 'Hidden' プロパティを監視するオブザーバーを追加します。

    - (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)object change:(NSDictionary *)change context:(void *)context メソッド

    - (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 から提示する必要があります。

于 2016-03-30T09:27:13.807 に答える
-1

1.First subclass of 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;
        }
    }];
}
于 2017-09-07T08:49:03.613 に答える
-3

もっと簡単な解決策があります。QLPreviewControllerDataSource メソッドを変更する必要があります。

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

プレビュー項目数を 1 に設定すると、下部のツールバーが自動的に非表示になります。

于 2016-05-23T14:20:37.800 に答える