Compare commits
4 Commits
3a21983b98
...
230696f456
Author | SHA1 | Date |
---|---|---|
Shadowfacts | 230696f456 | |
Shadowfacts | c113903980 | |
Shadowfacts | 0e95cd0adf | |
Shadowfacts | 494708a362 |
|
@ -1,5 +1,13 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2024.4 (134)
|
||||||
|
Features/Improvements:
|
||||||
|
- iOS 18: New floating sidebar/tab bar
|
||||||
|
|
||||||
|
Bugfixes:
|
||||||
|
- Fix crash when hashtag search results include duplicates
|
||||||
|
- Fix "no content" text not being removed from list timeline after refreshing
|
||||||
|
|
||||||
## 2024.3 (133)
|
## 2024.3 (133)
|
||||||
- Add additional info to Tip Jar
|
- Add additional info to Tip Jar
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,9 @@ class MainTabBarViewController: BaseMainTabBarViewController {
|
||||||
embedInNavigationController(Tab.myProfile.createViewController(mastodonController)),
|
embedInNavigationController(Tab.myProfile.createViewController(mastodonController)),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#if !os(visionOS)
|
||||||
setupFastAccountSwitcher()
|
setupFastAccountSwitcher()
|
||||||
|
#endif
|
||||||
|
|
||||||
tabBar.isSpringLoaded = true
|
tabBar.isSpringLoaded = true
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ final class NewMainTabBarViewController: BaseMainTabBarViewController {
|
||||||
]
|
]
|
||||||
reloadSavedInstances()
|
reloadSavedInstances()
|
||||||
|
|
||||||
if UIDevice.current.userInterfaceIdiom == .phone {
|
if UIDevice.current.userInterfaceIdiom == .phone || UIDevice.current.userInterfaceIdiom == .vision {
|
||||||
self.tabs = [
|
self.tabs = [
|
||||||
homeTab,
|
homeTab,
|
||||||
notificationsTab,
|
notificationsTab,
|
||||||
|
@ -121,7 +121,9 @@ final class NewMainTabBarViewController: BaseMainTabBarViewController {
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(reloadSavedInstances), name: .savedInstancesChanged, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(reloadSavedInstances), name: .savedInstancesChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !os(visionOS)
|
||||||
setupFastAccountSwitcher()
|
setupFastAccountSwitcher()
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updatePadTabs() {
|
private func updatePadTabs() {
|
||||||
|
@ -312,7 +314,9 @@ final class NewMainTabBarViewController: BaseMainTabBarViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func sidebarTapped() {
|
@objc private func sidebarTapped() {
|
||||||
|
#if !os(visionOS)
|
||||||
fastAccountSwitcher?.hide()
|
fastAccountSwitcher?.hide()
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private func showAddList() {
|
private func showAddList() {
|
||||||
|
@ -500,6 +504,9 @@ extension NewMainTabBarViewController: UITabBarController.Sidebar.Delegate {
|
||||||
config.imageProperties.maximumSize = CGSize(width: MainSidebarMyProfileCollectionViewCell.avatarImageSize, height: MainSidebarMyProfileCollectionViewCell.avatarImageSize)
|
config.imageProperties.maximumSize = CGSize(width: MainSidebarMyProfileCollectionViewCell.avatarImageSize, height: MainSidebarMyProfileCollectionViewCell.avatarImageSize)
|
||||||
config.imageProperties.cornerRadius = Preferences.shared.avatarStyle.cornerRadiusFraction * MainSidebarMyProfileCollectionViewCell.avatarImageSize
|
config.imageProperties.cornerRadius = Preferences.shared.avatarStyle.cornerRadiusFraction * MainSidebarMyProfileCollectionViewCell.avatarImageSize
|
||||||
|
|
||||||
|
#if os(visionOS)
|
||||||
|
item.contentConfiguration = config
|
||||||
|
#else
|
||||||
if UIDevice.current.userInterfaceIdiom != .mac {
|
if UIDevice.current.userInterfaceIdiom != .mac {
|
||||||
item.accessories = [
|
item.accessories = [
|
||||||
.customView(configuration: .init(customView: fastAccountSwitcherIndicator, placement: .trailing()))
|
.customView(configuration: .init(customView: fastAccountSwitcherIndicator, placement: .trailing()))
|
||||||
|
@ -510,6 +517,7 @@ extension NewMainTabBarViewController: UITabBarController.Sidebar.Delegate {
|
||||||
} else {
|
} else {
|
||||||
item.contentConfiguration = config
|
item.contentConfiguration = config
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import TuskerPreferences
|
||||||
|
|
||||||
@available(iOS 17.0, *)
|
@available(iOS 17.0, *)
|
||||||
class AdaptableNavigationController: UIViewController {
|
class AdaptableNavigationController: UIViewController {
|
||||||
|
@ -15,6 +15,7 @@ class AdaptableNavigationController: UIViewController {
|
||||||
private let viewControllersToPrependInCompact: [UIViewController]
|
private let viewControllersToPrependInCompact: [UIViewController]
|
||||||
|
|
||||||
private var initialViewControllers: [UIViewController] = []
|
private var initialViewControllers: [UIViewController] = []
|
||||||
|
private var currentWidescreenNavigationMode: WidescreenNavigationMode?
|
||||||
private lazy var regular = makeRegularNavigationController()
|
private lazy var regular = makeRegularNavigationController()
|
||||||
private lazy var compact = makeCompactNavigationController()
|
private lazy var compact = makeCompactNavigationController()
|
||||||
private var _current: (any NavigationControllerProtocol)?
|
private var _current: (any NavigationControllerProtocol)?
|
||||||
|
@ -39,6 +40,8 @@ class AdaptableNavigationController: UIViewController {
|
||||||
registerForTraitChanges([UITraitHorizontalSizeClass.self]) { (self: AdaptableNavigationController, previousTraitCollection) in
|
registerForTraitChanges([UITraitHorizontalSizeClass.self]) { (self: AdaptableNavigationController, previousTraitCollection) in
|
||||||
self.updateNavigationController()
|
self.updateNavigationController()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(preferencesChanged), name: .preferencesChanged, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateNavigationController() {
|
private func updateNavigationController() {
|
||||||
|
@ -47,6 +50,7 @@ class AdaptableNavigationController: UIViewController {
|
||||||
if let _current {
|
if let _current {
|
||||||
_current.removeViewAndController()
|
_current.removeViewAndController()
|
||||||
stack = _current.viewControllers
|
stack = _current.viewControllers
|
||||||
|
_current.viewControllers = []
|
||||||
isTransferring = true
|
isTransferring = true
|
||||||
} else {
|
} else {
|
||||||
stack = initialViewControllers
|
stack = initialViewControllers
|
||||||
|
@ -79,6 +83,7 @@ class AdaptableNavigationController: UIViewController {
|
||||||
|
|
||||||
private func makeRegularNavigationController() -> any NavigationControllerProtocol {
|
private func makeRegularNavigationController() -> any NavigationControllerProtocol {
|
||||||
// TODO: need to figure out how to update the navigation controller if the pref changes
|
// TODO: need to figure out how to update the navigation controller if the pref changes
|
||||||
|
self.currentWidescreenNavigationMode = Preferences.shared.widescreenNavigationMode
|
||||||
switch Preferences.shared.widescreenNavigationMode {
|
switch Preferences.shared.widescreenNavigationMode {
|
||||||
case .stack:
|
case .stack:
|
||||||
return EnhancedNavigationViewController()
|
return EnhancedNavigationViewController()
|
||||||
|
@ -92,6 +97,18 @@ class AdaptableNavigationController: UIViewController {
|
||||||
private func makeCompactNavigationController() -> any NavigationControllerProtocol {
|
private func makeCompactNavigationController() -> any NavigationControllerProtocol {
|
||||||
EnhancedNavigationViewController()
|
EnhancedNavigationViewController()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc private func preferencesChanged() {
|
||||||
|
if currentWidescreenNavigationMode != Preferences.shared.widescreenNavigationMode {
|
||||||
|
if let _current,
|
||||||
|
_current === regular {
|
||||||
|
regular = makeRegularNavigationController()
|
||||||
|
updateNavigationController()
|
||||||
|
} else {
|
||||||
|
regular = makeRegularNavigationController()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 17.0, *)
|
@available(iOS 17.0, *)
|
||||||
|
|
|
@ -87,7 +87,7 @@ class SplitNavigationController: UIViewController {
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
rootNav.view.topAnchor.constraint(equalTo: view.topAnchor),
|
rootNav.view.topAnchor.constraint(equalTo: view.topAnchor),
|
||||||
rootNav.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
rootNav.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||||
rootNav.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
rootNav.view.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
|
||||||
|
|
||||||
separatorView.topAnchor.constraint(equalTo: view.topAnchor),
|
separatorView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||||
separatorView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
separatorView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||||
|
@ -196,13 +196,13 @@ class SplitNavigationController: UIViewController {
|
||||||
NSLayoutConstraint.deactivate(constraints)
|
NSLayoutConstraint.deactivate(constraints)
|
||||||
if visible {
|
if visible {
|
||||||
constraints = [
|
constraints = [
|
||||||
rootNav.view.trailingAnchor.constraint(equalTo: view.centerXAnchor),
|
rootNav.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
|
||||||
secondaryNav.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
secondaryNav.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
constraints = [
|
constraints = [
|
||||||
rootNav.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
rootNav.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
|
||||||
secondaryNav.view.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5),
|
secondaryNav.view.widthAnchor.constraint(equalTo: rootNav.view.widthAnchor),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
NSLayoutConstraint.activate(constraints)
|
NSLayoutConstraint.activate(constraints)
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
// Configuration settings file format documentation can be found at:
|
// Configuration settings file format documentation can be found at:
|
||||||
// https://help.apple.com/xcode/#/dev745c5c974
|
// https://help.apple.com/xcode/#/dev745c5c974
|
||||||
|
|
||||||
MARKETING_VERSION = 2024.3
|
MARKETING_VERSION = 2024.4
|
||||||
CURRENT_PROJECT_VERSION = 133
|
CURRENT_PROJECT_VERSION = 134
|
||||||
CURRENT_PROJECT_VERSION = $(inherited)$(CURRENT_PROJECT_VERSION_BUILD_SUFFIX_$(CONFIGURATION))
|
CURRENT_PROJECT_VERSION = $(inherited)$(CURRENT_PROJECT_VERSION_BUILD_SUFFIX_$(CONFIGURATION))
|
||||||
|
|
||||||
CURRENT_PROJECT_VERSION_BUILD_SUFFIX_Debug=-dev
|
CURRENT_PROJECT_VERSION_BUILD_SUFFIX_Debug=-dev
|
||||||
|
|
Loading…
Reference in New Issue