DcNavigationController.swift 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import UIKit
  2. import Reachability
  3. final class DcNavigationController: UINavigationController {
  4. var stateChangedObserver: Any?
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. if #available(iOS 11.0, *) {
  8. navigationBar.prefersLargeTitles = true
  9. } else {
  10. navigationBar.setBackgroundImage(UIImage(), for: .default)
  11. }
  12. navigationBar.backgroundColor = .white
  13. setShadow(nil)
  14. }
  15. private func setShadow(_ state: String?) {
  16. switch state {
  17. case "offline":
  18. navigationBar.shadowImage = Constants.defaultShadow
  19. case "online":
  20. navigationBar.shadowImage = Constants.onlineShadow
  21. default:
  22. navigationBar.shadowImage = Constants.defaultShadow
  23. }
  24. }
  25. override func viewWillAppear(_ animated: Bool) {
  26. super.viewWillAppear(animated)
  27. if let connection = Reachability()?.connection {
  28. switch connection {
  29. case Reachability.Connection.cellular, Reachability.Connection.wifi:
  30. setShadow("online")
  31. case Reachability.Connection.none:
  32. setShadow("offline")
  33. }
  34. }
  35. let nc = NotificationCenter.default
  36. stateChangedObserver = nc.addObserver(
  37. forName: dcNotificationStateChanged,
  38. object: nil,
  39. queue: nil
  40. ) { notification in
  41. if let state = notification.userInfo?["state"] {
  42. self.setShadow(state as? String)
  43. }
  44. }
  45. }
  46. override func viewWillDisappear(_ animated: Bool) {
  47. super.viewWillDisappear(animated)
  48. let nc = NotificationCenter.default
  49. if let stateChangedObserver = self.stateChangedObserver {
  50. nc.removeObserver(stateChangedObserver)
  51. }
  52. }
  53. }