ios - 将子层添加到没有情节提要的 UITextField 不会设置文本字段的样式
问题描述
我决定学习在没有故事板的情况下使用 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()
一个函数 for Utilities.styleTextField(firstName)
,当我有故事板时,它工作得很好。在删除故事板并以编程方式添加约束后,我可以看到文本字段,但它是默认的,没有样式。
解决方案
我的猜测是,此时,您还没有设置文本字段的框架,所以CALayer
没有被绘制,因为它的大小是(width: 0, height: 0)
.
当您从 IB 获取组件时,它带有一个框架,这是您在工具中设置的那个。
在调用函数之前尝试设置框架。
推荐阅读
- javascript - 在打字稿中声明 for in 循环的键类型
- c# - 在实体中插入记录时,如何重现或修复 DCRM 中的字符串截断异常?
- reactjs - 如何使用`BrowserRouter`或`MemoryRouter`监视`history`?
- wix - 如何在使用 WIX 更新安装程序时处理配置
- pytorch - CNN forward 函数,AutoTuning 层数
- html - 不能改变里面文字的颜色
- react-native - 如何在 React Native 中实现显示不同语言的字幕?
- python - 来自 MT5 Python API 的平仓头寸不起作用
- haskell - Haskell 中的类型测试
- python - 超类 __init__() 中的子类特定属性