swift - UIKit - 如何防止 UITextField 的默认模糊和焦点背景?
问题描述
正如您在图像中看到的,UITextField
(仅在tvOS
?)默认情况下具有以下行为:
- 半透明覆盖(使第二个按钮中的背景和白色文本变灰)
- 聚焦时为白色背景和更大的尺寸(第一个按钮)
如何删除/更改这些行为?
我做了什么?
- 我试图在 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 模拟器上运行
- 没有使用额外的库/pod
解决方案
实际上,我们总是可以继承 UIKit 类并做任何我们想要的布局/样式。这是如何做到这一点的非常原始的演示。
使用 Xcode 12.1 / tvOS 14.0 准备和测试
所以只需替换 UITextField 类的自定义子类
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
}
}
推荐阅读
- r - 有什么!!!在 R 中做?
- c++ - 正则表达式:查找交替数字和字符串的模式
- java - 有额外的意图
- java - sql 查询中的“非此即彼”功能
- excel - 循环输入框并在没有消息的情况下关闭
- sql - 显示嵌套复杂查询的输出
- java - 尝试从 Java 连接到 Https url 时出现 401 错误
- amazon-web-services - 如何在 AWS ECS 集群中运行的 springBoot 应用程序中获取 containerId 或容器名称
- node.js - 使用 MongoDB 存储通知(连同读取状态)
- jsf - 在 JSF 页面中显示 Power Bi 仪表板