项目开发中,登录、注册、搜索这些功能必须要用到的控件就是UITextField。
例如:
UITextField有leftView属性就是来设置左边视图
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
运行效果
左边视图没有间距!
调整letftImageView.frame的x参数后发现依旧没有改变。由此得出结论
leftView的位置不能通过设置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
}
}
运行效果’此时间距已经增加了
间距问题解决,但文字输入问题是变成了
此时要重写editingRect方法
override func editingRect(forBounds bounds: CGRect) -> CGRect {
var rect:CGRect = super.editingRect(forBounds: bounds)
rect.origin.x = 50//距离参考标注
// rect.size.width = 190
return rect
}
其中 rect.size.width是设置文字处于编辑状态时显示的宽度,如果不进行设置文字会超出UITextField原始宽度
注意:
和editingRect有个相似的重写方法textRectForBounds,这两个方法要注意区别
editingRect是在你的文字处于编辑状态时所显示的
textRectForBounds是当键盘回落时,完成编辑后显示的方法。这两个切记
如果想对间距,宽度进行修改,建议声明额外属性,用时修改,这样的代码可以作为基类进行扩张而不影响其他功能使用
稍后更新rightview属性