UIKit - 如何防止 UITextField 的默认模糊和焦点背景?
UIKit - How to prevent default blur and focus background of UITextField?
如图所示,UITextField
(仅在 tvOS
上?)默认情况下具有以下行为:
- 半透明叠加层(使第二个按钮的背景和白色文本变灰)
- 聚焦时白色背景和更大的尺寸(第一个按钮)
我如何remove/change这些行为?
我做了什么?
- 我尝试将 Interface Builder 中所有与颜色相关的 属性(文本颜色除外)更改为
Clear color
我使用这些代码以编程方式构建视图
let view = UITextField()
view.backgroundColor = .clear
view.translatesAutoresizingMaskIntoConstraints = false
view.font = view.font?.withSize(16)
view.textAlignment = .center
view.borderStyle = .none
view.tintColor = .clear
view.tintAdjustmentMode = .normal
view.accessibilityIgnoresInvertColors = true
view.textColor = .white
view.disabledBackground = .none
view.background = .none
view.layer.backgroundColor = CGColor(gray: 0.0, alpha: 0.0)
view.layer.shadowColor = CGColor(gray: 0.0, alpha: 0.0)
view.layer.borderColor = CGColor(gray: 0.0, alpha: 0.0)
view.layer.shadowOpacity = 0.0
附加信息
- 一个新的 tvOS 应用程序项目,在 macOS 10.15.7
中使用 XCode 12.2 创建
- 运行 在 Apple TV 模拟器上
- 没有额外的 libraries/pods 使用
其实我们总是可以继承UIKit classes 做任何我们想做的layout/style。这是如何完成此操作的非常原始的演示。
已使用 Xcode 12.1 / tvOS 14.0
进行准备和测试
所以只需替换自定义 subclass 的 UITextField class
class MyTextField: UITextField {
lazy var textLayer = CATextLayer()
override func didMoveToSuperview() {
super.didMoveToSuperview()
layer.backgroundColor = UIColor.clear.cgColor
textLayer.font = self.font
textLayer.fontSize = 36
textLayer.foregroundColor = UIColor.white.cgColor
textLayer.alignmentMode = .center
textLayer.frame = layer.bounds
layer.addSublayer(textLayer)
layer.borderWidth = 2
}
override func layoutSublayers(of layer: CALayer) {
layer.borderColor = self.isFocused ? UIColor.black.cgColor : UIColor.clear.cgColor
textLayer.frame = layer.bounds
textLayer.string = self.text?.isEmpty ?? true ? self.placeholder : self.text
}
override func addSubview(_ view: UIView) {
// blocks standard styling
}
}
如图所示,UITextField
(仅在 tvOS
上?)默认情况下具有以下行为:
- 半透明叠加层(使第二个按钮的背景和白色文本变灰)
- 聚焦时白色背景和更大的尺寸(第一个按钮)
我如何remove/change这些行为?
我做了什么?
- 我尝试将 Interface Builder 中所有与颜色相关的 属性(文本颜色除外)更改为
Clear color
我使用这些代码以编程方式构建视图
let view = UITextField() view.backgroundColor = .clear view.translatesAutoresizingMaskIntoConstraints = false view.font = view.font?.withSize(16) view.textAlignment = .center view.borderStyle = .none view.tintColor = .clear view.tintAdjustmentMode = .normal view.accessibilityIgnoresInvertColors = true view.textColor = .white view.disabledBackground = .none view.background = .none view.layer.backgroundColor = CGColor(gray: 0.0, alpha: 0.0) view.layer.shadowColor = CGColor(gray: 0.0, alpha: 0.0) view.layer.borderColor = CGColor(gray: 0.0, alpha: 0.0) view.layer.shadowOpacity = 0.0
附加信息
- 一个新的 tvOS 应用程序项目,在 macOS 10.15.7 中使用 XCode 12.2 创建
- 运行 在 Apple TV 模拟器上
- 没有额外的 libraries/pods 使用
其实我们总是可以继承UIKit classes 做任何我们想做的layout/style。这是如何完成此操作的非常原始的演示。
已使用 Xcode 12.1 / tvOS 14.0
进行准备和测试所以只需替换自定义 subclass 的 UITextField class
class MyTextField: UITextField {
lazy var textLayer = CATextLayer()
override func didMoveToSuperview() {
super.didMoveToSuperview()
layer.backgroundColor = UIColor.clear.cgColor
textLayer.font = self.font
textLayer.fontSize = 36
textLayer.foregroundColor = UIColor.white.cgColor
textLayer.alignmentMode = .center
textLayer.frame = layer.bounds
layer.addSublayer(textLayer)
layer.borderWidth = 2
}
override func layoutSublayers(of layer: CALayer) {
layer.borderColor = self.isFocused ? UIColor.black.cgColor : UIColor.clear.cgColor
textLayer.frame = layer.bounds
textLayer.string = self.text?.isEmpty ?? true ? self.placeholder : self.text
}
override func addSubview(_ view: UIView) {
// blocks standard styling
}
}