我在我的應用程序中使用QLPreviewController
,並希望隱藏允許移動其數據源項目的底部工具欄。是否有可能做某事?QLPreviewController隱藏底部工具欄
我試圖搜索它作爲QLPreviewController's view
的subview
,但它只有一個_UISizeTrackingView
類的子視圖。據我瞭解這是一個私人課,所以我沒有權利去尋找那裏的東西。
有沒有什麼辦法可以隱藏這個工具欄,蘋果是否允許這樣做?謝謝。
我在我的應用程序中使用QLPreviewController
,並希望隱藏允許移動其數據源項目的底部工具欄。是否有可能做某事?QLPreviewController隱藏底部工具欄
我試圖搜索它作爲QLPreviewController's view
的subview
,但它只有一個_UISizeTrackingView
類的子視圖。據我瞭解這是一個私人課,所以我沒有權利去尋找那裏的東西。
有沒有什麼辦法可以隱藏這個工具欄,蘋果是否允許這樣做?謝謝。
尋找了很多答案後,終於找到了解決方案。如果您想一直隱藏bottomToolBar,可以按照以下步驟操作。 QLPreviewController的
實施「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"];
}
實現 - (無效)observeValueForKeyPath:(的NSString *)的keyPath ofObject:(ID)對象變化:(的NSDictionary *)變化上下文:(無效*)上下文 方法
- (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.Hope它適用於你呈現這個控制器!
有一個更簡單的解決方案,您必須更改QLPreviewControllerDataSource方法。
func numberOfPreviewItemsInPreviewController(controller: QLPreviewController) -> Int {
return 1
}
將預覽項目的數量設置爲1將自動隱藏底部工具欄。
這似乎不適用於iOS 10.默認外觀是顯示導航欄和工具欄。 – 2017-01-28 11:12:27
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
}
}
public override void ViewDidLayoutSubviews()
{
this.NavigationController.Toolbar.Hidden = true;
}
這會爲QLPreviewController
的肯定
1.首先子類工作2.coding
(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;
}
}];
}
你得到任何解決方案爲了這? – Smita 2014-10-06 06:06:46