UIDevice+Extension.swift 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //
  2. // UIDevice+Extension.swift
  3. // Nextcloud
  4. //
  5. // Created by Federico Malagoni on 23/02/22.
  6. // Copyright © 2022 Federico Malagoni. All rights reserved.
  7. //
  8. // Author Federico Malagoni <federico.malagoni@astrairidium.com>
  9. //
  10. // This program is free software: you can redistribute it and/or modify
  11. // it under the terms of the GNU General Public License as published by
  12. // the Free Software Foundation, either version 3 of the License, or
  13. // (at your option) any later version.
  14. //
  15. // This program is distributed in the hope that it will be useful,
  16. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. // GNU General Public License for more details.
  19. //
  20. // You should have received a copy of the GNU General Public License
  21. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  22. //
  23. import Foundation
  24. extension UIDevice {
  25. var hasNotch: Bool {
  26. if #available(iOS 11.0, *) {
  27. if UIApplication.shared.windows.isEmpty { return false }
  28. let top = UIApplication.shared.windows[0].safeAreaInsets.top
  29. return top > 20
  30. } else {
  31. // Fallback on earlier versions
  32. return false
  33. }
  34. }
  35. }
  36. extension UIDeviceOrientation {
  37. /// According to Apple... if the device is laid flat the UI is neither portrait nor landscape, so this flag ignores that and checks if the UI is REALLY in landscape. Thanks Apple.
  38. ///
  39. /// Unless you really need to use this, you can instead try `traitCollection.verticalSizeClass` and `traitCollection.horizontalSizeClass`.
  40. var isLandscapeHardCheck: Bool {
  41. if UIDevice.current.orientation.isValidInterfaceOrientation {
  42. return UIDevice.current.orientation.isLandscape
  43. } else {
  44. return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? false
  45. }
  46. }
  47. }