是否可以从QLPreviewController中删除导航栏

时间:2016-02-21 23:11:37

标签: ios objective-c swift uinavigationbar qlpreviewcontroller

我目前有一个UIView,它以编程方式在其中嵌入了QLPreviewController。我需要摆脱加载文档/网址时QLPreviewController所具有的默认导航栏。有没有办法做到这一点?

目前,我已尝试在<ul> <li><a href="#"><b>TANYA RUMPFF</b>Songs of a bird</a> </li> </ul>集合viewDidAppear中对QLPreviewController进行子类化。但这不起作用。

很抱歉,如果这是一个欺骗性的问题 - 过去几天我一直在网上查找,并且找不到iOS 8/9的具体答案。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

我希望这会有所帮助

答案 2 :(得分:0)

似乎确实可行。在运行时检查视图层次结构后,我发现您看到的导航栏实际上是视图控制器视图的子视图。下面的代码将其删除;但是,它不会消失,并且似乎没有任何批准的方式可以修改此类的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
                }
            }
        }
    }
}