fix: iPad layout update not take care of search tab selection logic issue
This commit is contained in:
parent
6d7de85f62
commit
07eab320f4
|
@ -351,6 +351,10 @@ extension MainTabBarController {
|
||||||
return viewController(of: NotificationViewController.self)
|
return viewController(of: NotificationViewController.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var searchViewController: SearchViewController? {
|
||||||
|
return viewController(of: SearchViewController.self)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - UITabBarControllerDelegate
|
// MARK: - UITabBarControllerDelegate
|
||||||
|
|
|
@ -19,6 +19,8 @@ final class RootSplitViewController: UISplitViewController, NeedsDependency {
|
||||||
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
|
weak var context: AppContext! { willSet { precondition(!isViewLoaded) } }
|
||||||
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
|
weak var coordinator: SceneCoordinator! { willSet { precondition(!isViewLoaded) } }
|
||||||
|
|
||||||
|
private var isPrimaryDisplay = false
|
||||||
|
|
||||||
private(set) lazy var contentSplitViewController: ContentSplitViewController = {
|
private(set) lazy var contentSplitViewController: ContentSplitViewController = {
|
||||||
let contentSplitViewController = ContentSplitViewController()
|
let contentSplitViewController = ContentSplitViewController()
|
||||||
contentSplitViewController.context = context
|
contentSplitViewController.context = context
|
||||||
|
@ -79,13 +81,6 @@ extension RootSplitViewController {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
updateBehavior(size: view.frame.size)
|
updateBehavior(size: view.frame.size)
|
||||||
contentSplitViewController.$currentSupplementaryTab
|
|
||||||
.receive(on: DispatchQueue.main)
|
|
||||||
.sink { [weak self] _ in
|
|
||||||
guard let self = self else { return }
|
|
||||||
self.updateBehavior(size: self.view.frame.size)
|
|
||||||
}
|
|
||||||
.store(in: &disposeBag)
|
|
||||||
|
|
||||||
setupBackground(theme: ThemeService.shared.currentTheme.value)
|
setupBackground(theme: ThemeService.shared.currentTheme.value)
|
||||||
ThemeService.shared.currentTheme
|
ThemeService.shared.currentTheme
|
||||||
|
@ -97,6 +92,12 @@ extension RootSplitViewController {
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
|
||||||
|
updateBehavior(size: view.frame.size)
|
||||||
|
}
|
||||||
|
|
||||||
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
|
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
|
||||||
super.viewWillTransition(to: size, with: coordinator)
|
super.viewWillTransition(to: size, with: coordinator)
|
||||||
|
|
||||||
|
@ -109,15 +110,23 @@ extension RootSplitViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateBehavior(size: CGSize) {
|
private func updateBehavior(size: CGSize) {
|
||||||
switch contentSplitViewController.currentSupplementaryTab {
|
if size.width > 960 {
|
||||||
case .search:
|
show(.primary)
|
||||||
|
isPrimaryDisplay = true
|
||||||
|
|
||||||
|
} else {
|
||||||
hide(.primary)
|
hide(.primary)
|
||||||
|
isPrimaryDisplay = false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (contentSplitViewController.currentSupplementaryTab, isPrimaryDisplay) {
|
||||||
|
case (.search, true):
|
||||||
|
// needs switch to other tab when primary display
|
||||||
|
// use FIFO queue save tab history
|
||||||
|
contentSplitViewController.currentSupplementaryTab = .home
|
||||||
default:
|
default:
|
||||||
if size.width > 960 {
|
// do nothing
|
||||||
show(.primary)
|
break
|
||||||
} else {
|
|
||||||
hide(.primary)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +149,11 @@ extension RootSplitViewController: ContentSplitViewControllerDelegate {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch tab {
|
switch tab {
|
||||||
case .search:
|
case .search:
|
||||||
|
guard isPrimaryDisplay else {
|
||||||
|
// only control search tab behavior when primary display
|
||||||
|
fallthrough
|
||||||
|
}
|
||||||
guard let navigationController = searchViewController.navigationController else { return }
|
guard let navigationController = searchViewController.navigationController else { return }
|
||||||
if navigationController.viewControllers.count == 1 {
|
if navigationController.viewControllers.count == 1 {
|
||||||
searchViewController.searchBarTapPublisher.send()
|
searchViewController.searchBarTapPublisher.send()
|
||||||
|
@ -165,7 +178,7 @@ extension RootSplitViewController: ContentSplitViewControllerDelegate {
|
||||||
// MARK: - UISplitViewControllerDelegate
|
// MARK: - UISplitViewControllerDelegate
|
||||||
extension RootSplitViewController: UISplitViewControllerDelegate {
|
extension RootSplitViewController: UISplitViewControllerDelegate {
|
||||||
|
|
||||||
private static func transform(from: UITabBarController, to: UITabBarController) {
|
private static func transform(from: UITabBarController, to: UITabBarController) {
|
||||||
let sourceNavigationControllers = from.viewControllers ?? []
|
let sourceNavigationControllers = from.viewControllers ?? []
|
||||||
let targetNavigationControllers = to.viewControllers ?? []
|
let targetNavigationControllers = to.viewControllers ?? []
|
||||||
|
|
||||||
|
@ -181,6 +194,11 @@ extension RootSplitViewController: UISplitViewControllerDelegate {
|
||||||
to.selectedIndex = from.selectedIndex
|
to.selectedIndex = from.selectedIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static func transform(from: UINavigationController, to: UINavigationController) {
|
||||||
|
let viewControllers = from.popToRootViewController(animated: false) ?? []
|
||||||
|
to.viewControllers.append(contentsOf: viewControllers)
|
||||||
|
}
|
||||||
|
|
||||||
// .regular to .compact
|
// .regular to .compact
|
||||||
func splitViewController(
|
func splitViewController(
|
||||||
_ svc: UISplitViewController,
|
_ svc: UISplitViewController,
|
||||||
|
|
Loading…
Reference in New Issue