是否有可能从QLPreviewController中移除导航栏?

4
我目前有一个UIView,其中以编程方式嵌入了一个QLPreviewController。当文档/ URL被加载时,我需要摆脱QLPreviewController默认的导航栏。有没有办法做到这一点?
目前,我尝试了子类化QLPreviewController并在viewDidAppear中设置self.navigationController!.navigationBarHidden = true。但这不起作用。
如果这是一个重复的问题,对不起 - 我已经在网上寻找了几天,但在iOS 8/9下找不到确切的答案。
4个回答

2
我通过使用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;
}

Self 是一种 UIViewController。 - violethill
你救了我的一天,我尝试了许多解决方案,但只有这个能正常工作。 - DzungPV

0

在viewWillAppear和viewDidLoad方法中同样适用: self.navigationController!.navigationBarHidden = true

希望这能帮到你。


0
这对我有用:
class CustomQLPreview: QLPreviewController {
    ...        
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()    
        navigationController?.setNavigationBarHidden(true, animated: false)          
    }
}

0

看起来似乎是可能的。在运行时检查视图层次结构后,我发现你看到的导航栏实际上是视图控制器视图的子视图。下面的代码将删除它;但是,它不会一直消失,而且似乎没有任何官方的方法来修改此类的UI元素。对此类的任何修改都将是一个脆弱的黑客,我建议找到一些 less locked down 的东西来自定义。

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
                }
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接