
- 注释掉Podfile中的Alamofire依赖,更新Podfile.lock以反映更改。 - 在yana/APIs/API-README.md中新增自动认证Header机制的详细文档,描述其工作原理、实现细节及最佳实践。 - 在yana/yanaApp.swift中将print语句替换为debugInfo以增强调试信息的输出。 - 在API相关文件中实现用户认证状态检查和相关header的自动添加逻辑,提升API请求的安全性和用户体验。 - 更新多个文件中的日志输出,确保在DEBUG模式下提供详细的调试信息。
111 lines
3.6 KiB
Swift
111 lines
3.6 KiB
Swift
import SwiftUI
|
||
|
||
/// 字体管理工具类
|
||
/// 统一管理项目中使用的自定义字体
|
||
struct FontManager {
|
||
|
||
// MARK: - 自定义字体名称
|
||
enum CustomFont: String, CaseIterable {
|
||
case bayonRegular = "Bayon-Regular"
|
||
|
||
/// 字体的显示名称
|
||
var displayName: String {
|
||
switch self {
|
||
case .bayonRegular:
|
||
return "Bayon Regular"
|
||
}
|
||
}
|
||
|
||
/// 字体文件名(不包含扩展名)
|
||
var fileName: String {
|
||
return self.rawValue
|
||
}
|
||
}
|
||
|
||
// MARK: - 字体创建方法
|
||
|
||
/// 创建自定义字体
|
||
/// - Parameters:
|
||
/// - customFont: 自定义字体类型
|
||
/// - size: 字体大小
|
||
/// - Returns: Font 对象
|
||
static func font(_ customFont: CustomFont, size: CGFloat) -> Font {
|
||
return Font.custom(customFont.rawValue, size: size)
|
||
}
|
||
|
||
/// 创建适配屏幕的自定义字体
|
||
/// - Parameters:
|
||
/// - customFont: 自定义字体类型
|
||
/// - designSize: 设计稿中的字体大小
|
||
/// - screenWidth: 当前屏幕宽度
|
||
/// - Returns: Font 对象
|
||
static func adaptedFont(_ customFont: CustomFont, designSize: CGFloat, for screenWidth: CGFloat) -> Font {
|
||
let adaptedSize = ScreenAdapter.fontSize(designSize, for: screenWidth)
|
||
return Font.custom(customFont.rawValue, size: adaptedSize)
|
||
}
|
||
|
||
/// 检查字体是否可用
|
||
/// - Parameter customFont: 自定义字体类型
|
||
/// - Returns: 字体是否可用
|
||
static func isFontAvailable(_ customFont: CustomFont) -> Bool {
|
||
let fontNames = UIFont.familyNames
|
||
.flatMap { UIFont.fontNames(forFamilyName: $0) }
|
||
|
||
return fontNames.contains(customFont.rawValue)
|
||
}
|
||
|
||
/// 获取所有可用的字体列表(调试用)
|
||
/// - Returns: 所有可用字体名称的数组
|
||
static func getAllAvailableFonts() -> [String] {
|
||
return UIFont.familyNames
|
||
.flatMap { family in
|
||
UIFont.fontNames(forFamilyName: family)
|
||
.map { _ in "\(family): \(String(describing: font))" }
|
||
}
|
||
.sorted()
|
||
}
|
||
|
||
/// 打印所有可用字体(调试用)
|
||
static func printAllAvailableFonts() {
|
||
debugInfo("=== 所有可用字体 ===")
|
||
for font in getAllAvailableFonts() {
|
||
debugInfo(font)
|
||
}
|
||
debugInfo("==================")
|
||
}
|
||
}
|
||
|
||
// MARK: - SwiftUI View Extension
|
||
extension View {
|
||
/// 应用自定义字体
|
||
/// - Parameters:
|
||
/// - customFont: 自定义字体类型
|
||
/// - size: 字体大小
|
||
/// - Returns: 应用了自定义字体的视图
|
||
func customFont(_ customFont: FontManager.CustomFont, size: CGFloat) -> some View {
|
||
self.font(FontManager.font(customFont, size: size))
|
||
}
|
||
|
||
/// 应用适配屏幕的自定义字体
|
||
/// - Parameters:
|
||
/// - customFont: 自定义字体类型
|
||
/// - designSize: 设计稿中的字体大小
|
||
/// - Returns: 应用了适配字体的视图修饰器
|
||
func adaptedCustomFont(_ customFont: FontManager.CustomFont, designSize: CGFloat) -> some View {
|
||
self.modifier(AdaptedCustomFontModifier(customFont: customFont, designSize: designSize))
|
||
}
|
||
}
|
||
|
||
// MARK: - ViewModifier
|
||
struct AdaptedCustomFontModifier: ViewModifier {
|
||
let customFont: FontManager.CustomFont
|
||
let designSize: CGFloat
|
||
|
||
func body(content: Content) -> some View {
|
||
GeometryReader { geometry in
|
||
content
|
||
.font(FontManager.adaptedFont(customFont, designSize: designSize, for: geometry.size.width))
|
||
}
|
||
}
|
||
}
|