< 返回首页

标哥的笔记,是记录在日常学习技术和日常开发中那些年遇到过的坑!本站为新站,原"标哥的技术博客"中的文章会慢慢移到本站,欢迎收藏本站!
在使用本站过程中,有任何建议请联系标哥! 另,承接App开发、网站开发和微信小程序开发!欢迎联系我们


UITextField修改占位字体大小后不垂直居中解决办法

 作者:标哥    发布日期:2017-04-03 00:30    阅读量:3332次
 

UITextField通过attributedPlaceholder修改占位符的字体的大小后,不再居中显示了,怎么处理呢?记录一下解决的办法,下次可直接使用!

解决办法

extension UITextField {
  class func make(_ superView: UIView, tip: String, constraints: HYBConstraintClosure?) ->UITextField {
    let txt = UITextField()
    
    txt.placeholder = tip
    let fontSize: CGFloat = 13.0
    txt.font = UIFont.systemFont(ofSize: fontSize)
    
    let style = NSMutableParagraphStyle()
    style.minimumLineHeight = (txt.font?.lineHeight)! - ((txt.font?.lineHeight)! - UIFont.systemFont(ofSize: fontSize).lineHeight) / 2.0;
    
    let attr = NSMutableAttributedString(string: tip, attributes: [
      NSFontAttributeName: UIFont.systemFont(ofSize: fontSize),
      NSParagraphStyleAttributeName: style
      ])
    txt.attributedPlaceholder = attr
    
    superView.addSubview(txt)
    txt.autocorrectionType = .no
    txt.autocapitalizationType = .none
    txt.leftViewMode = .always
    txt.leftView = UIView(frame: r(0.0, 0.0, 8.0, 1.0))
    txt.clearButtonMode = .always
    
    if let c = constraints {
      txt.snp.makeConstraints(c)
    }
    
    return txt
  }
}

其中的关键在于重新计算出最小高度,用于校正,从而实现垂直居中!下面的代码是关键!

style.minimumLineHeight = (txt.font?.lineHeight)! - ((txt.font?.lineHeight)! - UIFont.systemFont(ofSize: fontSize).lineHeight) / 2.0;


承接:ThinkPHP项目开发、网站项目开发、微信项目开发、微信小程序项目开发、App开发,欢迎联系标哥QQ632840804