QLPreviewController 隐藏底部工具栏

B.S*_*.S. 4 objective-c ios qlpreviewcontroller

QLPreviewController在我的应用程序中使用并希望隐藏底部工具栏,该工具栏允许在其数据源项目中移动。有可能以某种方式做吗?

我尝试将其作为subviewof进行搜索QLPreviewController's view,但它只有一个_UISizeTrackingViewclass 子视图。据我了解,这是一个私人课程,所以我无权在那里寻找东西。

有没有什么方法可以隐藏这个工具栏,Apple 允许这样做吗?谢谢。

Vit*_*nko 5

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
    }
}
Run Code Online (Sandbox Code Playgroud)