繁体   English   中英

QLPreviewController隐藏底部工具栏

[英]QLPreviewController hide bottom toolbar

我在我的应用程序中使用QLPreviewController ,并希望隐藏底部的工具栏,该工具栏允许在其数据源项之间移动。 有可能做些什么吗?

我试图将其作为QLPreviewController's view subview进行搜索,但是它只有_UISizeTrackingView类的一个子视图。 据我了解,这是一门私人课程,所以我无权在那儿找东西。

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

QLPreviewViewController可以有多个工具栏。 这就是为什么您需要在子视图中找到所有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
    }
}

寻找了很多答案之后,终于找到了解决方案。如果您想一直隐藏bottomToolBar,可以按照以下步骤进行操作。

  1. QLPreviewController的第一个子类
  2. 实现“ getToolBarFromView”功能以获取QLPreviewController的工具栏

     - (UIToolbar *)getToolBarFromView:(UIView *)view { // Find the QL ToolBar for (UIView *v in view.subviews) { if ([v isKindOfClass:[UIToolbar class]]) { return (UIToolbar *)v; } else { UIToolbar *toolBar = [self getToolBarFromView:v]; if (toolBar) { return toolBar; } } } return nil; } 
  3. 获取工具栏并添加观察者以观察其“隐藏”属性。

     - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; // Get the ToolBar self.qlToolBar = [self getToolBarFromView:self.view]; self.qlToolBar.hidden = true; if (self.qlToolBar) { [self.qlToolBar addObserver:self forKeyPath:@"hidden" options:NSKeyValueObservingOptionPrior context:nil]; } } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.navigationController removeObserver:self forKeyPath:@"hidden"]; } 
  4. 实现-(void)observeValueForKeyPath:(NSString *)Object:(id)对象的keyPath:(NSDictionary *)更改上下文:(void *)上下文方法

     - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ BOOL isToolBarHidden = self.qlToolBar.hidden; // If the ToolBar is not hidden if (!isToolBarHidden) { dispatch_async(dispatch_get_main_queue(), ^{ self.qlToolBar.hidden = true; }); } } 

最后要做的是从您自己的navigationController中呈现此控制器。希望它对您有用!

public override void ViewDidLayoutSubviews()
        {
            this.NavigationController.Toolbar.Hidden = true;

        }

这肯定可以工作

1. QLPreviewController的第一个子类

2.编码

(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj isKindOfClass:[UIToolbar class]]) {
            obj.hidden = YES;
        }
    }];

    [self.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj isKindOfClass:[UIToolbar class]]) {
            obj.hidden = YES;
        }
    }];
}

有一个更简单的解决方案,您必须更改QLPreviewControllerDataSource方法。

func numberOfPreviewItemsInPreviewController(controller: QLPreviewController) -> Int {
    return 1
}

将预览项目的数量设置为1将自动隐藏底部的工具栏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM