項目開發(fā)中,登錄壤追、注冊忙芒、搜索這些功能必須要用到的控件就是UITextField示弓。
例如:
image.png
UITextField有l(wèi)eftView屬性就是來設(shè)置左邊視圖
let nameField = NFTextField()
self.view.addSubview(nameField);
nameField.frame = CGRect.init(x: 10, y: 90, width: 300, height: 50);
let letftImageView = UIImageView.init(image: UIImage.init(named: "add_friend"))
letftImageView.frame = CGRect.init(x: 0, y: 0, width: 10, height: 10)
nameField.leftView = letftImageView
nameField.leftViewMode = .always
運行效果
image.png
左邊視圖沒有間距!
調(diào)整letftImageView.frame的x參數(shù)后發(fā)現(xiàn)依舊沒有改變呵萨。由此得出結(jié)論
leftView的位置不能通過設(shè)置frame的X奏属、Y來改變,frame只能改變寬和高
在UITextField的文檔里有一個重寫方法
open func leftViewRect(forBounds bounds: CGRect) -> CGRect
自定義UITextField重寫leftViewRect方法
import UIKit
class NFTextField: UITextField {
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var rect:CGRect = super.leftViewRect(forBounds: bounds)
rect.origin.x = 5
return rect
}
}
運行效果’image.png
此時間距已經(jīng)增加了
間距問題解決潮峦,但文字輸入問題是變成了
image.png
此時要重寫editingRect方法
override func editingRect(forBounds bounds: CGRect) -> CGRect {
var rect:CGRect = super.editingRect(forBounds: bounds)
rect.origin.x = 50//距離參考標(biāo)注
// rect.size.width = 190
return rect
}
其中 rect.size.width是設(shè)置文字處于編輯狀態(tài)時顯示的寬度囱皿,如果不進(jìn)行設(shè)置文字會超出UITextField原始寬度
注意:
和editingRect有個相似的重寫方法textRectForBounds,這兩個方法要注意區(qū)別
editingRect是在你的文字處于編輯狀態(tài)時所顯示的
textRectForBounds是當(dāng)鍵盤回落時忱嘹,完成編輯后顯示的方法嘱腥。這兩個切記
如果想對間距,寬度進(jìn)行修改拘悦,建議聲明額外屬性齿兔,用時修改,這樣的代碼可以作為基類進(jìn)行擴張而不影響其他功能使用
稍后更新rightview屬性