目标
我已经创建了自己的UITextField子类,以无边框的方式设计文本,在文本下方只有一条白线。 (下面的子类代码)
问题
不幸的是,白线没有到达文本字段的末尾(就宽度而言): 我已将文本字段限制为与视图的左边缘和右边缘都具有0 px的距离,但如下图所示,该行不符合这些约束。
我的调查和假设
我花了很多时间进行调试,我唯一能想到的是代码(在下面复制)中指定的尺寸在将约束应用于视图之前已经执行了,这不是我所知道的解决方法。
代码
//In a UITextField subclass
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
public override func awakeFromNib() {
super.awakeFromNib()
setup()
}
func setup() {
self.delegate = self
// BORDER
// Remove rectangular border
self.borderStyle = .none
self.layer.borderColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0).cgColor //Make transparent
self.layer.borderWidth = 0 // width = 0
// Add bottom border
bottomBorder = UIView(frame: CGRect(x: 0, y: self.frame.height, width: self.frame.width, height: 1))
bottomBorder.backgroundColor = UIColor.white
self.addSubview(bottomBorder)
}
答案 0 :(得分:0)
您需要
override func layoutSubviews() {
super.layoutSubviews()
bottomBorder.frame = CGRect(x: 0, y: self.frame.height - 1, width: self.frame.width, height: 1)
}
由于SuperView的正确帧大小是在layoutSubviews
/ init
中捕获的,而不是在awakeFromNib
/ sample(myDF$V1)
内捕获的,因此如果该帧是在IB中为当前开发设备尺寸设置的,则为
答案 1 :(得分:0)
我唯一能想到的是,在将约束应用于视图之前,代码(在下面复制)中指定的尺寸是正确的,
完全正确!整个问题是您正在根据文本字段的框架对条形框架进行硬编码。但是在init
期间尚不知道文本字段的框架。
您的整个方法是错误的。您应该使用自动布局约束将条形图约束到文本字段,而不是给该条形图固定的框架。这样,无论文本字段的大小发生什么变化(因为它遵循您所给的限制),条形的大小都会完美协调。