按QLPreviewController并将Translucent设置为false?

时间:2017-03-19 12:50:51

标签: ios swift

我无法禁用QLPreviewController的半透明属性。我已经尝试过了:

 let preview = SideQLPreviewController()
 preview.navigationController?.navigationBar.isTranslucent = false //before
 self.navigationController?.pushViewController(preview, animated: false)
 preview.navigationController?.navigationBar.isTranslucent = false //after
 self.navigationController?.navigationBar.isTranslucent = false 

已经尝试过子类并设置:

class SideQLPreviewController: QLPreviewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.isTranslucent = false
    // Do any additional setup after loading the view.
}

但仍然没有成功 - 任何想法?

2 个答案:

答案 0 :(得分:0)

如果你出现QLPreviewController,根本就没有导航控制器。这样的事情可以起作用:

class PreviewController: QLPreviewController {
    var navigationBar: UINavigationBar? {
        return view.recursiveSubviews.filter({ $0 is UINavigationBar }).first as? UINavigationBar
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationBar?.isTranslucent = false
    }
}

extension UIView {
    var recursiveSubviews: [UIView] {
        var recursiveSubviews: [UIView] = []
        for subview in subviews {
            recursiveSubviews.append(subview)
            recursiveSubviews.append(contentsOf: subview.recursiveSubviews)
        }
        return recursiveSubviews
    }
}

答案 1 :(得分:0)

您可以在子类的viewDidLayoutSubviews中执行此操作,这对我有用。

class PreviewController: QLPreviewController {

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        navigationController?.navigationBar.isTranslucent = false
    }
}

然后只需实例化新类

let previewController = PreviewController()//QLPreviewController()
previewController.dataSource = self
navigationController?.pushViewController(previewController, animated: true)