如何将标签放在图像上并确保文本始终可读?

时间:2017-08-23 20:30:32

标签: ios swift ios10

我有一个UICollectionView,其中单元格包含UILabel并且有一个背景视图,它是一个UIImage。标签背景清晰。我的问题是,当文本颜色与文本出现的图像区域中的颜色之间几乎没有对比时,文本的片段可能变得难以阅读。我怀疑有一些技术可以用来帮助解决这个问题(带有黑色边框的白色文字可能吗?可能吗?怎么样?)。有人请告诉我吗?

首先编辑:

我试过了@EssamMohamed / @AbdelahadDarwish的答案,但它没有用。我可能做错了。

我正在使用.xib文件和自定义类。这是自定义类:

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)
        }
    }
}

2 个答案:

答案 0 :(得分:2)

我认为使用[color 1]文本和[color 2]笔划,其中颜色1和颜色2是对比颜色将是好主意(补色方案),你可以从色轮中选择这两种颜色的颜色面对面。

enter image description here

如果您搜索有关如何进行描边的方法,请查看link以获取帮助。

答案 1 :(得分:0)

您可以使用label的attributesText

get1()

/////////

//以及何时使用

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
         }
         */

    }