如何在图像上放置标签并确保文本始终可读?
How Can I Place A Label Onto An Image And Ensure That The Text Is Always Readable?
我有一个 UICollectionView,其中的单元格包含 UILabel,并且有一个 backgroundView,它是一个 UIImage。标签背景清晰。我的问题是,当文本颜色与出现文本的图像区域中的颜色之间几乎没有对比度时,文本片段会变得难以阅读。我怀疑有一些技术可以用来帮助解决这个问题(也许是带有黑色边框的白色文本?可能吗?如何?)。有人可以告诉我吗?
第一次编辑:
我尝试了@EssamMohamed / @AbdelahadDarwish 的回答,但没有成功。我可能做错了什么。
我正在使用 .xib 文件和自定义 class。这是自定义 class:
class PointOfInterestCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel! {
didSet {
//nameLabel.textColor = UIColor.tohTerracotaColor()
}
}
@IBOutlet weak var distanceLabel: UILabel! {
didSet {
let strokeTextAttributes = [
NSStrokeColorAttributeName : UIColor.black,
NSForegroundColorAttributeName : UIColor.white,
NSStrokeWidthAttributeName : -1.0,
] as [String : Any]
let text = distanceLabel.text ?? "????"
distanceLabel.attributedText = NSAttributedString(string: text, attributes: strokeTextAttributes)
}
}
}
您可以使用标签的属性文本
import UIKit
@IBDesignable
class StrockLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: CGRect.zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var text: String?{
didSet{
let strokeTextAttributes = [
NSStrokeColorAttributeName : UIColor.black,
NSForegroundColorAttributeName : UIColor.white,
NSStrokeWidthAttributeName : -1.0,
] as [String : Any]
let textStr = text ?? "????"
self.attributedText = NSAttributedString(string: textStr, attributes: strokeTextAttributes)
}
}
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
}
/////////
//当使用
@IBOutlet weak var distanceLabel: StrockLabel!
distanceLabel.text = "DDDD"
我认为使用带有 [颜色 2] 描边的 [颜色 1] 文本是个好主意,其中颜色 1 和颜色 2 是对比色(互补色方案),您可以从色轮中选择这些颜色两种颜色相对。
如果您搜索如何画笔画,请查看此 以获取帮助。
我有一个 UICollectionView,其中的单元格包含 UILabel,并且有一个 backgroundView,它是一个 UIImage。标签背景清晰。我的问题是,当文本颜色与出现文本的图像区域中的颜色之间几乎没有对比度时,文本片段会变得难以阅读。我怀疑有一些技术可以用来帮助解决这个问题(也许是带有黑色边框的白色文本?可能吗?如何?)。有人可以告诉我吗?
第一次编辑:
我尝试了@EssamMohamed / @AbdelahadDarwish 的回答,但没有成功。我可能做错了什么。
我正在使用 .xib 文件和自定义 class。这是自定义 class:
class PointOfInterestCell: UICollectionViewCell {
@IBOutlet weak var nameLabel: UILabel! {
didSet {
//nameLabel.textColor = UIColor.tohTerracotaColor()
}
}
@IBOutlet weak var distanceLabel: UILabel! {
didSet {
let strokeTextAttributes = [
NSStrokeColorAttributeName : UIColor.black,
NSForegroundColorAttributeName : UIColor.white,
NSStrokeWidthAttributeName : -1.0,
] as [String : Any]
let text = distanceLabel.text ?? "????"
distanceLabel.attributedText = NSAttributedString(string: text, attributes: strokeTextAttributes)
}
}
}
您可以使用标签的属性文本
import UIKit
@IBDesignable
class StrockLabel: UILabel {
override init(frame: CGRect) {
super.init(frame: CGRect.zero)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override var text: String?{
didSet{
let strokeTextAttributes = [
NSStrokeColorAttributeName : UIColor.black,
NSForegroundColorAttributeName : UIColor.white,
NSStrokeWidthAttributeName : -1.0,
] as [String : Any]
let textStr = text ?? "????"
self.attributedText = NSAttributedString(string: textStr, attributes: strokeTextAttributes)
}
}
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
}
/////////
//当使用
@IBOutlet weak var distanceLabel: StrockLabel!
distanceLabel.text = "DDDD"
我认为使用带有 [颜色 2] 描边的 [颜色 1] 文本是个好主意,其中颜色 1 和颜色 2 是对比色(互补色方案),您可以从色轮中选择这些颜色两种颜色相对。
如果您搜索如何画笔画,请查看此