【发布时间】:2016-04-19 10:52:34
【问题描述】:
我一直在尝试更改 iOS 中本机 UIDatePicker 中的字体,我做到了,但有一些不确定的细节:
我使用 UIDatePicker 的扩展来更改标签中的字体:
extension UIDatePicker {
func stylizeView(view: UIView? = nil) {
let view = view ?? self
for subview in view.subviews {
if let label = subview as? UILabel {
if let text = label.text {
print("UIDatePicker :: sylizeLabel :: \(text)\n")
label.font = UIFont(name: "MyriadPro-Light", size: 17)!
}
} else { stylizeView(subview) }
}
}}
所以,你可以深度自定义字体:
struct DatePickerStyle {
let tintColor = UIColor(hex: 0xFFFFFF)
let font = UIFont(name: "MyriadPro-Light", size: 17)!
let fontColor = UIColor(hex: 0x000000)
let fontKern: CGFloat = 0.2
var paragraphStyle: NSMutableParagraphStyle {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 4
paragraphStyle.lineHeightMultiple = 1
paragraphStyle.alignment = .Right
return paragraphStyle
}}
extension UIDatePicker {
func stylizeView(view: UIView? = nil) {
let style = DatePickerStyle()
let view = view ?? self
for subview in view.subviews {
if let label = subview as? UILabel {
if let text = label.text {
print("UIDatePicker :: sylizeLabel :: \(text)\n")
let attributedString = NSMutableAttributedString(string: text)
let attributedStringRange = NSMakeRange(0, attributedString.length)
attributedString.addAttributes([
NSParagraphStyleAttributeName: style.paragraphStyle,
NSFontAttributeName: style.font,
NSForegroundColorAttributeName: style.fontColor,
NSKernAttributeName: style.fontKern
], range: attributedStringRange)
//label.font = style.font
label.tintColor = style.fontColor
label.attributedText = attributedString
}
} else { stylizeView(subview) }
}
}
}
扩展中的此功能在UIDatePicker的任何控制事件上实现:
datePicker.addTarget(self, action: #selector(CellWithDatePicker.updateDatePickerStyle), forControlEvents: .AllEvents)
&
func updateDatePickerStyle() {
print(":: updateDatePickerStyle")
datePicker.stylizeView()
}
问题一:
当我初始化 UIDatePicker 时,选择器的字体仍然是 SanFrancisco。
但是当我在 UIDatePicker 中更改值时,字体会更改为我的字体
我尝试在 UIDatePicker 生命周期的每个阶段实现 datePicker.stylizeView() 或 self.stylizeView(),但它只能更改 DatePicker 的选定行。
问题 2:
当我在 pic.2 之后旋转 DatePicker 时,当 DatePicker 的所有标签都设置为 newFont 时,所选行之外的新标签仍然使用旧字体(SanFrancisco)。当我停止旋转 DatePicker 时,所有标签都会更新为 newFont。
知道怎么解决吗?
【问题讨论】:
标签: swift uidatepicker