Replace CYLTabBarController with native UITabBarController for main tabs.
Use a system scan tab slot with MainScanTabItem interception so scanner presentation no longer depends on CYL PlusButton, and remove the CYLTabBarController pod dependency. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -1,87 +0,0 @@
|
||||
//
|
||||
// MainScanPlusButton.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import CYLTabBarController
|
||||
import UIKit
|
||||
|
||||
@MainActor
|
||||
@objcMembers
|
||||
/// 主 TabBar 中间扫码核销按钮,基于 CYLTabBarController 的 PlusButton 机制实现。
|
||||
final class MainScanPlusButton: CYLPlusButton, CYLPlusButtonSubclassing {
|
||||
|
||||
/// 点击扫码按钮时的回调,由 `MainTabBarController` 注入。
|
||||
static var onScanTap: (() -> Void)?
|
||||
|
||||
/// 构建中间扫码按钮实例,供 CYLTabBarController 注册使用。
|
||||
static func plusButton() -> Any {
|
||||
let button = MainScanPlusButton()
|
||||
button.setImage(UIImage(named: "icon_scan"), for: .normal)
|
||||
button.titleLabel?.textAlignment = .center
|
||||
|
||||
button.titleLabel?.font = UIFont.systemFont(ofSize: 10)
|
||||
|
||||
button.setTitle("发布", for: .normal)
|
||||
button.setTitleColor(UIColor.gray, for: .normal)
|
||||
|
||||
button.setTitle("选中", for: .selected)
|
||||
button.setTitleColor(UIColor(red:255.0/255.0,green:102.0/255.0,blue:0,alpha:1.0), for: .selected)
|
||||
|
||||
button.adjustsImageWhenHighlighted = false
|
||||
button.sizeToFit()
|
||||
return button
|
||||
}
|
||||
|
||||
/// 指定扫码按钮在 TabBar 中的视觉槽位(位于订单与数据之间)。
|
||||
static func indexOfPlusButtonInTabBar() -> UInt {
|
||||
2
|
||||
}
|
||||
|
||||
/// 调整扫码按钮垂直位置,使其略微凸出 TabBar 顶部。
|
||||
static func constantOfPlusButtonCenterYOffset(forTabBarHeight tabBarHeight: CGFloat) -> CGFloat {
|
||||
-6
|
||||
}
|
||||
|
||||
/// 配置圆形背景与扫码图标,对齐参考工程 CustomMainTabBarCenterAction。
|
||||
private func configureAppearance() {
|
||||
backgroundColor = .clear
|
||||
|
||||
let circleSize: CGFloat = 58
|
||||
let circleView = UIView()
|
||||
circleView.isUserInteractionEnabled = false
|
||||
circleView.backgroundColor = AppDesign.primary
|
||||
circleView.layer.cornerRadius = circleSize / 2
|
||||
addSubview(circleView)
|
||||
|
||||
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 30, weight: .bold)
|
||||
let iconView = UIImageView(
|
||||
image: UIImage(named: "icon_scan")
|
||||
)
|
||||
iconView.tintColor = .white
|
||||
iconView.contentMode = .scaleAspectFit
|
||||
iconView.isUserInteractionEnabled = false
|
||||
addSubview(iconView)
|
||||
|
||||
circleView.translatesAutoresizingMaskIntoConstraints = false
|
||||
iconView.translatesAutoresizingMaskIntoConstraints = false
|
||||
NSLayoutConstraint.activate([
|
||||
circleView.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
circleView.centerYAnchor.constraint(equalTo: centerYAnchor),
|
||||
circleView.widthAnchor.constraint(equalToConstant: circleSize),
|
||||
circleView.heightAnchor.constraint(equalToConstant: circleSize),
|
||||
iconView.centerXAnchor.constraint(equalTo: circleView.centerXAnchor),
|
||||
iconView.centerYAnchor.constraint(equalTo: circleView.centerYAnchor),
|
||||
iconView.widthAnchor.constraint(equalToConstant: 30),
|
||||
iconView.heightAnchor.constraint(equalToConstant: 30)
|
||||
])
|
||||
|
||||
accessibilityLabel = "扫码核销"
|
||||
accessibilityIdentifier = "main.scan"
|
||||
}
|
||||
|
||||
/// 响应用户点击,触发全局扫码流程。
|
||||
@objc private func handleScanTap() {
|
||||
Self.onScanTap?()
|
||||
}
|
||||
}
|
||||
21
suixinkan_ios/Features/Main/Views/MainScanTabItem.swift
Normal file
21
suixinkan_ios/Features/Main/Views/MainScanTabItem.swift
Normal file
@ -0,0 +1,21 @@
|
||||
//
|
||||
// MainScanTabItem.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@MainActor
|
||||
/// 主 TabBar 中间扫码核销入口,负责构建系统 TabBarItem。
|
||||
enum MainScanTabItem {
|
||||
|
||||
/// 构建系统扫码 TabBarItem,点击行为由 `MainTabBarController` 拦截处理。
|
||||
static func makeTabBarItem() -> UITabBarItem {
|
||||
let image = UIImage(named: "icon_scan")?.withRenderingMode(.alwaysOriginal)
|
||||
let selectedImage = UIImage(named: "icon_scan")?.withRenderingMode(.alwaysOriginal)
|
||||
let item = UITabBarItem(title: "扫码", image: image, selectedImage: selectedImage)
|
||||
item.accessibilityLabel = "扫码核销"
|
||||
item.accessibilityIdentifier = "main.scan"
|
||||
return item
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user