Browse Source

Fix for iPad and small screen sizes

Signed-off-by: Philippe Weidmann <philippe.weidmann@infomaniak.com>
Philippe Weidmann 5 years ago
parent
commit
359b4ad560

+ 4 - 0
Nextcloud.xcodeproj/project.pbxproj

@@ -11,6 +11,7 @@
 		371B5A2E23D0B04500FAFAE9 /* MainMenuTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A2D23D0B04500FAFAE9 /* MainMenuTableViewController.swift */; };
 		371B5A3123D0B71B00FAFAE9 /* MainMenuManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371B5A3023D0B71A00FAFAE9 /* MainMenuManager.swift */; };
 		371B5A3323D0BD5500FAFAE9 /* FloatingPanel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 371B5A3223D0BD5500FAFAE9 /* FloatingPanel.framework */; };
+		3757A35523D9D76300EC369E /* MenuPanelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3757A35423D9D76300EC369E /* MenuPanelController.swift */; };
 		37ECC83B23D0C7410082EFA2 /* MenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37ECC83A23D0C7400082EFA2 /* MenuAction.swift */; };
 		F700222C1EC479840080073F /* Custom.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F700222B1EC479840080073F /* Custom.xcassets */; };
 		F700222D1EC479840080073F /* Custom.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F700222B1EC479840080073F /* Custom.xcassets */; };
@@ -671,6 +672,7 @@
 		371B5A2D23D0B04500FAFAE9 /* MainMenuTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuTableViewController.swift; sourceTree = "<group>"; };
 		371B5A3023D0B71A00FAFAE9 /* MainMenuManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuManager.swift; sourceTree = "<group>"; };
 		371B5A3223D0BD5500FAFAE9 /* FloatingPanel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FloatingPanel.framework; path = Carthage/Build/iOS/FloatingPanel.framework; sourceTree = "<group>"; };
+		3757A35423D9D76300EC369E /* MenuPanelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuPanelController.swift; sourceTree = "<group>"; };
 		37ECC83A23D0C7400082EFA2 /* MenuAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuAction.swift; sourceTree = "<group>"; };
 		F700222B1EC479840080073F /* Custom.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Custom.xcassets; sourceTree = "<group>"; };
 		F70022661EC4C9100080073F /* OCActivity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCActivity.h; sourceTree = "<group>"; };
@@ -1512,6 +1514,7 @@
 			children = (
 				371B5A2D23D0B04500FAFAE9 /* MainMenuTableViewController.swift */,
 				371B5A3023D0B71A00FAFAE9 /* MainMenuManager.swift */,
+				3757A35423D9D76300EC369E /* MenuPanelController.swift */,
 				37ECC83A23D0C7400082EFA2 /* MenuAction.swift */,
 				3704EB2923D5A58400455C5B /* Menu.storyboard */,
 			);
@@ -3569,6 +3572,7 @@
 				F749C10C23C4A5340027D966 /* IntroViewController.swift in Sources */,
 				F77B0E1B1D118A16002130FE /* CCGraphics.m in Sources */,
 				F70022CB1EC4C9100080073F /* OCSharedDto.m in Sources */,
+				3757A35523D9D76300EC369E /* MenuPanelController.swift in Sources */,
 				F7CA1ED320E7E3FE002CC65E /* PKStopDownloadButton.m in Sources */,
 				F762CB111EACB66200B38484 /* NSString+XLFormAdditions.m in Sources */,
 				F7D423871F0596C6009C9782 /* ReaderThumbsView.m in Sources */,

+ 35 - 89
iOSClient/Main/Menu/MainMenuManager.swift

@@ -129,19 +129,13 @@ extension AppDelegate {
         let mainMenuViewController = UIStoryboard.init(name: "Menu", bundle: nil).instantiateViewController(withIdentifier: "MainMenuTableViewController") as! MainMenuTableViewController
         mainMenuViewController.actions = self.initMenu()
 
-        let fpc = FloatingPanelController()
-        fpc.surfaceView.grabberHandle.isHidden = true
-        fpc.delegate = mainMenuViewController
-        fpc.set(contentViewController: mainMenuViewController)
-        fpc.track(scrollView: mainMenuViewController.tableView)
-        fpc.isRemovalInteractionEnabled = true
-        if #available(iOS 11, *) {
-            fpc.surfaceView.cornerRadius = 16
-        } else {
-            fpc.surfaceView.cornerRadius = 0
-        }
-
-        viewController.present(fpc, animated: true, completion: nil)
+        let menuPanelController = MenuPanelController()
+        menuPanelController.panelWidth = Int(viewController.view.frame.width)
+        menuPanelController.delegate = mainMenuViewController
+        menuPanelController.set(contentViewController: mainMenuViewController)
+        menuPanelController.track(scrollView: mainMenuViewController.tableView)
+        
+        viewController.present(menuPanelController, animated: true, completion: nil)
     }
 }
 
@@ -221,38 +215,26 @@ extension CCMain {
         let mainMenuViewController = UIStoryboard.init(name: "Menu", bundle: nil).instantiateViewController(withIdentifier: "MainMenuTableViewController") as! MainMenuTableViewController
         mainMenuViewController.actions = self.initSortMenu()
 
-        let fpc = FloatingPanelController()
-        fpc.surfaceView.grabberHandle.isHidden = true
-        fpc.delegate = mainMenuViewController
-        fpc.set(contentViewController: mainMenuViewController)
-        fpc.track(scrollView: mainMenuViewController.tableView)
-        fpc.isRemovalInteractionEnabled = true
-        if #available(iOS 11, *) {
-            fpc.surfaceView.cornerRadius = 16
-        } else {
-            fpc.surfaceView.cornerRadius = 0
-        }
-
-        viewController.present(fpc, animated: true, completion: nil)
+        let menuPanelController = MenuPanelController()
+        menuPanelController.panelWidth = Int(viewController.view.frame.width)
+        menuPanelController.delegate = mainMenuViewController
+        menuPanelController.set(contentViewController: mainMenuViewController)
+        menuPanelController.track(scrollView: mainMenuViewController.tableView)
+        
+        viewController.present(menuPanelController, animated: true, completion: nil)
     }
 
     @objc func toggleSelectMenu(viewController: UIViewController) {
         let mainMenuViewController = UIStoryboard.init(name: "Menu", bundle: nil).instantiateViewController(withIdentifier: "MainMenuTableViewController") as! MainMenuTableViewController
         mainMenuViewController.actions = self.initSelectMenu()
 
-        let fpc = FloatingPanelController()
-        fpc.surfaceView.grabberHandle.isHidden = true
-        fpc.delegate = mainMenuViewController
-        fpc.set(contentViewController: mainMenuViewController)
-        fpc.track(scrollView: mainMenuViewController.tableView)
-        fpc.isRemovalInteractionEnabled = true
-        if #available(iOS 11, *) {
-            fpc.surfaceView.cornerRadius = 16
-        } else {
-            fpc.surfaceView.cornerRadius = 0
-        }
-
-        viewController.present(fpc, animated: true, completion: nil)
+        let menuPanelController = MenuPanelController()
+        menuPanelController.panelWidth = Int(viewController.view.frame.width)
+        menuPanelController.delegate = mainMenuViewController
+        menuPanelController.set(contentViewController: mainMenuViewController)
+        menuPanelController.track(scrollView: mainMenuViewController.tableView)
+        
+        viewController.present(menuPanelController, animated: true, completion: nil)
     }
 
 
@@ -518,19 +500,13 @@ extension CCMain {
         let mainMenuViewController = UIStoryboard.init(name: "Menu", bundle: nil).instantiateViewController(withIdentifier: "MainMenuTableViewController") as! MainMenuTableViewController
         mainMenuViewController.actions = self.initMoreMenu(indexPath: indexPath, metadata: metadata, metadataFolder: metadataFolder)
 
-        let fpc = FloatingPanelController()
-        fpc.surfaceView.grabberHandle.isHidden = true
-        fpc.delegate = mainMenuViewController
-        fpc.set(contentViewController: mainMenuViewController)
-        fpc.track(scrollView: mainMenuViewController.tableView)
-        fpc.isRemovalInteractionEnabled = true
-        if #available(iOS 11, *) {
-            fpc.surfaceView.cornerRadius = 16
-        } else {
-            fpc.surfaceView.cornerRadius = 0
-        }
-
-        viewController.present(fpc, animated: true, completion: nil)
+        let menuPanelController = MenuPanelController()
+        menuPanelController.panelWidth = Int(viewController.view.frame.width)
+        menuPanelController.delegate = mainMenuViewController
+        menuPanelController.set(contentViewController: mainMenuViewController)
+        menuPanelController.track(scrollView: mainMenuViewController.tableView)
+        
+        viewController.present(menuPanelController, animated: true, completion: nil)
     }
 
 }
@@ -582,42 +558,12 @@ extension CCFavorites {
         let mainMenuViewController = UIStoryboard.init(name: "Menu", bundle: nil).instantiateViewController(withIdentifier: "MainMenuTableViewController") as! MainMenuTableViewController
         mainMenuViewController.actions = self.initMoreMenu(indexPath: indexPath, metadata: metadata)
 
-        let fpc = FloatingPanelController()
-        fpc.surfaceView.grabberHandle.isHidden = true
-        fpc.delegate = mainMenuViewController
-        fpc.set(contentViewController: mainMenuViewController)
-        fpc.track(scrollView: mainMenuViewController.tableView)
-        fpc.isRemovalInteractionEnabled = true
-        if #available(iOS 11, *) {
-            fpc.surfaceView.cornerRadius = 16
-        } else {
-            fpc.surfaceView.cornerRadius = 0
-        }
-
-        viewController.present(fpc, animated: true, completion: nil)
-    }
-}
-
-//helper to find the current top view controller
-extension UIViewController {
-    @objc class func topViewController(rootViewController: UIViewController?) -> UIViewController? {
-        guard let rootViewController = rootViewController else {
-            return nil
-        }
-
-        guard let presented = rootViewController.presentedViewController else {
-            return rootViewController
-        }
-
-        switch presented {
-        case let navigationController as UINavigationController:
-            return topViewController(rootViewController: navigationController.viewControllers.last)
-
-        case let tabBarController as UITabBarController:
-            return topViewController(rootViewController: tabBarController.selectedViewController)
-
-        default:
-            return topViewController(rootViewController: presented)
-        }
+        let menuPanelController = MenuPanelController()
+        menuPanelController.panelWidth = Int(viewController.view.frame.width)
+        menuPanelController.delegate = mainMenuViewController
+        menuPanelController.set(contentViewController: mainMenuViewController)
+        menuPanelController.track(scrollView: mainMenuViewController.tableView)
+        
+        viewController.present(menuPanelController, animated: true, completion: nil)
     }
 }

+ 3 - 6
iOSClient/Main/Menu/MainMenuTableViewController.swift

@@ -50,7 +50,6 @@ class MainMenuTableViewController: UITableViewController {
 
         cell.accessoryType = action.selectable && action.selected ? .checkmark : .none
 
-
         return cell
     }
 
@@ -58,7 +57,7 @@ class MainMenuTableViewController: UITableViewController {
 extension MainMenuTableViewController: FloatingPanelControllerDelegate {
 
     func floatingPanel(_ vc: FloatingPanelController, layoutFor newCollection: UITraitCollection) -> FloatingPanelLayout? {
-        return MainMenuFloatingPanelLayout(height: self.actions.count * 60)
+        return MainMenuFloatingPanelLayout(height: min(self.actions.count * 60, Int(self.view.frame.height) - 48))
     }
 
     func floatingPanel(_ vc: FloatingPanelController, behaviorFor newCollection: UITraitCollection) -> FloatingPanelBehavior? {
@@ -80,20 +79,18 @@ class MainMenuFloatingPanelLayout: FloatingPanelLayout {
     }
 
     var supportedPositions: Set<FloatingPanelPosition> {
-        return [.half]
+        return [.tip]
     }
 
     func insetFor(position: FloatingPanelPosition) -> CGFloat? {
         switch position {
-        case .half: return height
         case .tip: return height
         default: return nil
         }
     }
 
-
     func backdropAlphaFor(position: FloatingPanelPosition) -> CGFloat {
-        return 0.5
+        return 0.2
     }
 }
 

+ 1 - 1
iOSClient/Main/Menu/Menu.storyboard

@@ -11,7 +11,7 @@
         <scene sceneID="ibU-BJ-tlj">
             <objects>
                 <tableViewController storyboardIdentifier="MainMenuTableViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="dbT-V0-aXb" customClass="MainMenuTableViewController" customModule="Nextcloud" customModuleProvider="target" sceneMemberID="viewController">
-                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="60" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="pvY-CD-sI6">
+                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="60" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="pvY-CD-sI6">
                         <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>

+ 35 - 0
iOSClient/Main/Menu/MenuPanelController.swift

@@ -0,0 +1,35 @@
+//
+//  MenuPanelController.swift
+//  Nextcloud
+//
+//  Created by Philippe Weidmann on 23.01.20.
+//  Copyright © 2020 TWS. All rights reserved.
+//
+
+import FloatingPanel
+
+class MenuPanelController: FloatingPanelController {
+
+    var panelWidth: Int? = 0
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+                
+        self.surfaceView.grabberHandle.isHidden = true
+        self.isRemovalInteractionEnabled = true
+        if #available(iOS 11, *) {
+            self.surfaceView.cornerRadius = 16
+        } else {
+            self.surfaceView.cornerRadius = 0
+        }
+    }
+    
+    override func viewWillLayoutSubviews() {
+        super.viewWillLayoutSubviews()
+        
+        if let width = panelWidth {
+            self.view.frame = CGRect(x: 0, y: 0, width: width, height: Int(self.view.frame.height))
+        }
+    }
+    
+}