[英]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,可以按照以下步驟進行操作。
實現“ 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; }
獲取工具欄並添加觀察者以觀察其“隱藏”屬性。
- (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"]; }
實現-(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.