2016-04-19 66 views
1

我一直试图在iOS中,更改字体在本地的UIDatePicker,我做到了,但也有一些悬而未决的细节:迅速的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() 
} 

问题1:

当我初始化的UIDatePicker,拾取器的字体仍然是SanFrancisco的。

但是,当我在的UIDatePicker改变后,字体改为我的字体

My Font

我试图执行datePicker.stylizeView()self.stylizeView()上的每一个阶段UIDatePicker生命周期,但它只能更改DatePicker的选定行。

问题2:

虽然我pic.2后旋转的DatePicker时的DatePicker的所有标签被设定为newFont,新的标签,其是所选择的线的外侧仍与旧字体(SanFrancisco的)。当我停止旋转DatePicker时,所有标签都更新为newFont。

enter image description here

不知道如何解决它?

回答

0

使用间隔为0.1的GCD调用样式函数。

实施例:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) 
{ 
    self.datePicker.stylizeView();ss 
}