在没有情节提要的情况下将子层添加到 UITextField 不会设置文本字段的样式
Adding sublayer to UITextField without storyboard doesnt style the textfields
我决定学习使用 Swift 而不使用故事板。在进行切换之前,我在一个名为 Utilities.swift
的文件中有一个函数,该函数具有设置文本字段样式的函数,当我有故事板时它工作正常。
class Utilities {
static func styleTextField(_ textfield:UITextField) {
let bottomLine = CALayer()
bottomLine.frame = CGRect(x: 0, y: textfield.frame.height - 2, width: textfield.frame.width, height: 2)
bottomLine.backgroundColor = UIColor.init(red: 48/255, green: 173/255, blue: 99/255, alpha: 1).cgColor
textfield.borderStyle = .none
textfield.layer.addSublayer(bottomLine)
}
}
然后在我的视图控制器中,我有 let firstName = UITextField()
,然后是 Utilities.styleTextField(firstName)
的函数,当我有故事板时,它工作正常。删除故事板并以编程方式添加约束后,我可以看到文本字段,但它是默认没有样式的。
我的猜测是,在这一点上,您还没有设置文本字段的框架,所以 CALayer
没有被绘制,因为它的大小是 (width: 0, height: 0)
.
当您从 IB 获取组件时,它带有一个框架,这是您在工具中设置的框架。
尝试在调用函数之前设置框架。
我决定学习使用 Swift 而不使用故事板。在进行切换之前,我在一个名为 Utilities.swift
的文件中有一个函数,该函数具有设置文本字段样式的函数,当我有故事板时它工作正常。
class Utilities {
static func styleTextField(_ textfield:UITextField) {
let bottomLine = CALayer()
bottomLine.frame = CGRect(x: 0, y: textfield.frame.height - 2, width: textfield.frame.width, height: 2)
bottomLine.backgroundColor = UIColor.init(red: 48/255, green: 173/255, blue: 99/255, alpha: 1).cgColor
textfield.borderStyle = .none
textfield.layer.addSublayer(bottomLine)
}
}
然后在我的视图控制器中,我有 let firstName = UITextField()
,然后是 Utilities.styleTextField(firstName)
的函数,当我有故事板时,它工作正常。删除故事板并以编程方式添加约束后,我可以看到文本字段,但它是默认没有样式的。
我的猜测是,在这一点上,您还没有设置文本字段的框架,所以 CALayer
没有被绘制,因为它的大小是 (width: 0, height: 0)
.
当您从 IB 获取组件时,它带有一个框架,这是您在工具中设置的框架。
尝试在调用函数之前设置框架。