I would like to mask text of a UILabel to achieve the following result
Asked
Active
Viewed 375 times
3
-
2I think this is what you mean: [https://stackoverflow.com/questions/28082055/how-could-you-make-a-uilabel-wrap-around-an-image-like-shown](https://stackoverflow.com/questions/28082055/how-could-you-make-a-uilabel-wrap-around-an-image-like-shown) – Johan Velthuis Jun 10 '19 at 08:40
3 Answers
0
In Swift, You can do it like this:
var attributedString = NSMutableAttributedString(string: "Your String")
let textAttachment = NSTextAttachment()
textAttachment.image = UIImage(named: "Your Image Name")
let attrStringWithImage = NSAttributedString(attachment: textAttachment)
attributedString.insert(attrStringWithImage, at: 0)
label.attributedText = attributedString

Anshul Bhatheja
- 673
- 3
- 21
0
This will work for you .
extension UILabel
{
func addImage(imageName: String)
{
let attachment:NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: imageName)
let attachmentString:NSAttributedString = NSAttributedString(attachment: attachment)
let myString:NSMutableAttributedString = NSMutableAttributedString(string: self.text!)
myString.appendAttributedString(attachmentString)
self.attributedText = myString
}
}
Another version of the code that allow adding the icon before or after the label.
extension UILabel
{
func addImage(imageName: String, afterLabel bolAfterLabel: Bool = false)
{
let attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: imageName)
let attachmentString: NSAttributedString = NSAttributedString(attachment: attachment)
if (bolAfterLabel)
{
let strLabelText: NSMutableAttributedString = NSMutableAttributedString(string: self.text!)
strLabelText.appendAttributedString(attachmentString)
self.attributedText = strLabelText
}
else
{
let strLabelText: NSAttributedString = NSAttributedString(string: self.text!)
let mutableAttachmentString: NSMutableAttributedString = NSMutableAttributedString(attributedString: attachmentString)
mutableAttachmentString.appendAttributedString(strLabelText)
self.attributedText = mutableAttachmentString
}
}
//you can remove the image by calling this function
func removeImage()
{
let text = self.text
self.attributedText = nil
self.text = text
}
}

Mantu
- 1,017
- 1
- 10
- 21
0
For this use a UITextView
instead of UILabel
.
let imgRectBezier = UIBezierPath(rect: imgView.frame)
txtView.textContainer.exclusionPaths = [imgRectBezier]
Using this, the text will be excluded from the frame area added in the exclusion paths. You can even exclude multiple frames.

Amal T S
- 3,327
- 2
- 24
- 57