開發(fā)過程遇到UITextField輸入中文時(shí)指蚁,文字會(huì)向下偏移。有審美潔癖的人看著會(huì)不舒服颈娜,所以研究了下解決方式:
我的解決辦法:
class FrankTextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
self.clipsToBounds = false
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.clipsToBounds = false
}
override func layoutSubviews() {
super.layoutSubviews()
for view in self.subviews {
if view is UIScrollView {
let sView:UIScrollView = view as! UIScrollView
var offset:CGPoint = sView.contentOffset
if offset.y != 0 {
offset.y = 0
sView.contentOffset = offset
}
break
}
}
}
}
UItextField上的文字實(shí)際上是UIFieldEditor類承載的剑逃,UIFieldEditor是UIScrollView的子類,所以發(fā)生偏移的時(shí)候我們把偏移值置為0就解決問題了官辽。
網(wǎng)上還有三種解決方式蛹磺,但是我測(cè)試沒有效果,在這里還是做下記錄:
方法一同仆、
self.automaticallyAdjustsScrollViewInsets = false
方法二萤捆、
用代碼設(shè)置清楚按鈕
textField.clearButtonMode = UITextFieldViewModeWhileEditing
方法三、
//繼承UITextField 重寫方法
override func textRect(forBounds bounds: CGRect) -> CGRect {
super.textRect(forBounds: bounds)
return bounds.insetBy(dx: 2, dy: 1)
}
override func editingRect(forBounds bounds: CGRect) -> CGRect {
super.editingRect(forBounds: bounds)
return bounds.insetBy(dx: 2, dy: 1)
}