59 lines
1.7 KiB
Swift
59 lines
1.7 KiB
Swift
import React
|
|
import UIKit
|
|
|
|
struct RouterFontUtils {
|
|
static func convertTitleStyleToFont(_ titleStyle: TitleStyle) -> UIFont {
|
|
let fontFamily = titleStyle.fontFamily
|
|
let fontWeight = titleStyle.fontWeight
|
|
|
|
let resolvedFontSize = resolveFontSize(titleStyle.fontSize)
|
|
|
|
if fontFamily != nil || fontWeight != nil {
|
|
return RCTFont.update(
|
|
nil,
|
|
withFamily: fontFamily,
|
|
size: NSNumber(value: Float(resolvedFontSize)),
|
|
weight: fontWeight,
|
|
style: nil,
|
|
variant: nil,
|
|
scaleMultiplier: 1.0)
|
|
}
|
|
return UIFont.systemFont(ofSize: resolvedFontSize)
|
|
}
|
|
|
|
static func setTitleStyle(fromConfig titleStyle: TitleStyle, for item: UIBarButtonItem) {
|
|
var attrs: [NSAttributedString.Key: Any] = [:]
|
|
|
|
attrs[.font] = convertTitleStyleToFont(titleStyle)
|
|
|
|
if let color = titleStyle.color {
|
|
attrs[.foregroundColor] = color
|
|
}
|
|
|
|
item.setTitleTextAttributes(attrs, for: .normal)
|
|
item.setTitleTextAttributes(attrs, for: .highlighted)
|
|
item.setTitleTextAttributes(attrs, for: .disabled)
|
|
item.setTitleTextAttributes(attrs, for: .selected)
|
|
item.setTitleTextAttributes(attrs, for: .focused)
|
|
}
|
|
|
|
static func clearTitleStyle(for item: UIBarButtonItem) {
|
|
item.setTitleTextAttributes(nil, for: .normal)
|
|
item.setTitleTextAttributes(nil, for: .highlighted)
|
|
item.setTitleTextAttributes(nil, for: .disabled)
|
|
item.setTitleTextAttributes(nil, for: .selected)
|
|
item.setTitleTextAttributes(nil, for: .focused)
|
|
}
|
|
|
|
private static func resolveFontSize(_ fontSize: Double?) -> CGFloat {
|
|
if let fontSize = fontSize {
|
|
return CGFloat(fontSize)
|
|
}
|
|
#if os(tvOS)
|
|
return 17.0
|
|
#else
|
|
return UIFont.labelFontSize
|
|
#endif
|
|
}
|
|
}
|