refactor: 重构 EPMomentViewController,替换 UITableView 为 EPMomentListView

主要变更:
1. 移除 UITableView,改为使用 EPMomentListView 以简化数据展示和交互。
2. 添加顶部固定文案 UILabel,提升用户体验。
3. 通过 EPMomentAPIHelper 统一管理 Moments 列表 API 请求,优化数据加载逻辑。
4. 更新 UI 约束,确保布局适配不同屏幕。

此重构旨在提升代码可维护性和用户界面的一致性。
This commit is contained in:
edwinQQQ
2025-10-10 17:22:39 +08:00
parent 8b177e5fad
commit e8d59495a4
9 changed files with 396 additions and 588 deletions

View File

@@ -43,6 +43,9 @@ import SnapKit
// TabBar
self.tabBar.isHidden = true
// delegate
self.delegate = self
setupCustomFloatingTabBar()
setupGlobalManagers()
setupInitialViewControllers()
@@ -111,14 +114,12 @@ import SnapKit
selectedImage: "tab_moment_on",
tag: 0
)
momentButton.isSelected = true
let mineButton = createTabButton(
normalImage: "tab_mine_off",
selectedImage: "tab_mine_on",
tag: 1
)
mineButton.isSelected = true
tabButtons = [momentButton, mineButton]
@@ -144,35 +145,35 @@ import SnapKit
private func createTabButton(normalImage: String, selectedImage: String, tag: Int) -> UIButton {
let button = UIButton(type: .custom)
button.tag = tag
// button便
button.accessibilityLabel = normalImage
button.accessibilityHint = selectedImage
button.adjustsImageWhenHighlighted = false //
// 使 SF Symbols
if let normalImg = UIImage(named: normalImage), let _ = UIImage(named: selectedImage) {
// 使 off
if let normalImg = UIImage(named: normalImage), let selectedImg = UIImage(named: selectedImage) {
// normal selected
button.setImage(normalImg, for: .normal)
button.setImage(selectedImg, for: .selected)
} else {
// 使 SF Symbols
let fallbackIcons = ["sparkles", "person.circle"]
let iconName = fallbackIcons[tag]
let imageConfig = UIImage.SymbolConfiguration(pointSize: 24, weight: .medium)
let normalIcon = UIImage(systemName: iconName, withConfiguration: imageConfig)
button.setImage(UIImage(systemName: iconName, withConfiguration: imageConfig), for: .normal)
button.setImage(normalIcon, for: .normal)
button.setImage(normalIcon, for: .selected)
button.tintColor = .white.withAlphaComponent(0.6)
}
//
button.imageView?.contentMode = .scaleAspectFit
// 使
//
button.setTitle(nil, for: .normal)
button.setTitle(nil, for: .selected)
//
button.imageView?.snp.makeConstraints { make in
make.size.equalTo(28) //
make.size.equalTo(28)
}
button.addTarget(self, action: #selector(tabButtonTapped(_:)), for: .touchUpInside)
@@ -191,8 +192,10 @@ import SnapKit
//
updateTabButtonStates(selectedIndex: newIndex)
// ViewController使
selectedIndex = newIndex
// UITabBarController
UIView.performWithoutAnimation {
selectedIndex = newIndex
}
let tabNames = ["动态", "我的"]
NSLog("[EPTabBarController] 选中 Tab: \(tabNames[newIndex])")
@@ -205,32 +208,23 @@ import SnapKit
for (index, button) in tabButtons.enumerated() {
let isSelected = (index == selectedIndex)
// isSelected
button.isSelected = isSelected
//
if let normalImageName = button.accessibilityLabel,
let selectedImageName = button.accessibilityHint {
// 使
let imageName = isSelected ? selectedImageName : normalImageName
if let image = UIImage(named: imageName) {
button.setImage(image, for: .normal)
} else {
// 使 SF Symbols
button.tintColor = isSelected ? .white : .white.withAlphaComponent(0.6)
}
} else {
// 使 SF Symbols
// SF Symbols tintColor
if button.currentImage?.isSymbolImage == true {
button.tintColor = isSelected ? .white : .white.withAlphaComponent(0.6)
}
//
UIView.animate(withDuration: 0.25, delay: 0, options: [.curveEaseInOut], animations: {
//
UIView.animate(withDuration: 0.2, delay: 0, options: [.curveEaseOut], animations: {
button.transform = isSelected ? CGAffineTransform(scaleX: 1.1, y: 1.1) : .identity
}, completion: nil)
})
}
//
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
//
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
self.tabButtons.forEach { $0.isUserInteractionEnabled = true }
}
}
@@ -317,22 +311,34 @@ import SnapKit
!(viewControllers?[0] is EPMomentViewController) ||
!(viewControllers?[1] is EPMineViewController) {
// ViewControllerOC
// ViewControllerOC 使/
let momentVC = EPMomentViewController()
momentVC.tabBarItem = createTabBarItem(
momentVC.title = "动态"
let momentNav = UINavigationController(rootViewController: momentVC)
momentNav.navigationBar.isTranslucent = true
momentNav.navigationBar.setBackgroundImage(UIImage(), for: .default)
momentNav.navigationBar.shadowImage = UIImage()
momentNav.view.backgroundColor = .clear
momentNav.tabBarItem = createTabBarItem(
title: "动态",
normalImage: "tab_moment_normal",
selectedImage: "tab_moment_selected"
)
let mineVC = EPMineViewController()
mineVC.tabBarItem = createTabBarItem(
mineVC.title = "我的"
let mineNav = UINavigationController(rootViewController: mineVC)
mineNav.navigationBar.isTranslucent = true
mineNav.navigationBar.setBackgroundImage(UIImage(), for: .default)
mineNav.navigationBar.shadowImage = UIImage()
mineNav.view.backgroundColor = .clear
mineNav.tabBarItem = createTabBarItem(
title: "我的",
normalImage: "tab_mine_normal",
selectedImage: "tab_mine_selected"
)
viewControllers = [momentVC, mineVC]
viewControllers = [momentNav, mineNav]
NSLog("[EPTabBarController] 登录后 ViewControllers 创建完成 - Moment & Mine")
}
@@ -347,6 +353,21 @@ extension EPTabBarController: UITabBarControllerDelegate {
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
NSLog("[EPTabBarController] 选中 Tab: \(item.title ?? "Unknown")")
}
///
func tabBarController(_ tabBarController: UITabBarController,
animationControllerForTransitionFrom fromVC: UIViewController,
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
// nil 使
return nil
}
///
func tabBarController(_ tabBarController: UITabBarController,
shouldSelect viewController: UIViewController) -> Bool {
// nil animationController
return true
}
}
// MARK: - OC Compatibility