【问题标题】:Is it possible to remove the navigation bar from QLPreviewController是否可以从 QLPreviewController 中删除导航栏
【发布时间】:2016-06-03 06:30:21
【问题描述】:

我目前有一个 UIView,它以编程方式嵌入了 QLPreviewController。我需要去掉加载文档/url 时 QLPreviewController 的默认导航栏。有没有办法做到这一点?

目前,我尝试将 QLPreviewController 子类化并在 viewDidAppear 中设置 self.navigationController!.navigationBarHidden = true。但这不起作用。

抱歉,如果这是一个骗人的问题 - 最近几天我一直在网上寻找,但找不到 iOS 8/9 的具体答案。

【问题讨论】:

    标签: ios objective-c swift uinavigationbar qlpreviewcontroller


    【解决方案1】:

    这对我有用:

    class CustomQLPreview: QLPreviewController {
        ...        
        override func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()    
            navigationController?.setNavigationBarHidden(true, animated: false)          
        }
    }
    

    【讨论】:

      【解决方案2】:

      这似乎是可能的。在运行时检查视图层次结构后,我发现您看到的导航栏实际上是视图控制器视图的子视图。下面的代码将删除它;但是,它不会消失,并且似乎没有任何认可的方式可以修改此类的 UI 元素。对此类的任何修改都将是一个脆弱的 hack,我建议您找到一些不那么锁定的东西来自定义。

      class MyPreviewViewController: QLPreviewController {
          override func viewWillLayoutSubviews() {
              super.viewWillLayoutSubviews()
      
              if let subviewsWithNav = self.view.subviews.first?.subviews {
                  for view in subviewsWithNav {
                      if let navbar = view as? UINavigationBar {
                          navbar.isHidden = true
                      }
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        我通过使用 addChildViewController 解决了这个问题

        - (void)viewDidLoad {
            [super viewDidLoad];
            [self setupPreviewController];
        }
        
        - (void)setupPreviewController {
            self.previewController = [[QLPreviewController alloc] init];
            [self addChildViewController:self.previewController];
            [self.view addSubview:self.previewController.view];
        
            //do autolayout
            [self.previewController.view mas_makeConstraints:^(MASConstraintMaker *make) {
                make.top.left.right.bottom.equalTo(self.view);
            }];
            self.navigationController.navigationBarHidden = YES;
        }
        

        【讨论】:

        • 自我是一种 UIViewController
        • 你救了我的命,我尝试了很多解决方案,这是唯一一个可以正常工作的解决方案。
        【解决方案4】:

        同样的事情适用于 viewWillAppear 和 viewDidLoad 方法 self.navigationController!.navigationBarHidden = true

        我希望这会有所帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多