skip to Main Content

I want to increase the spread of a shadow in my UILabel but I can’t find the property to do that. I have added a photo below to illustrate the issue.

An example of the desired label shadow, and the current one.

The top Label is the desired effect I am able to create in Photoshop. The bottom Label illustrates the properties I was able to find in iOS. Here is the code I used for the bottom Label.

let bottomLabel = UILabel(frame: CGRectMake(0, 0, maxWidth, 18))
bottomLabel.backgroundColor = UIColor.clearColor()
bottomLabel.textColor = UIColor.whiteColor()
bottomLabel.font = UIFont.boldSystemFontOfSize(16)
bottomLabel.text = title
bottomLabel.textAlignment = .Center
bottomLabel.numberOfLines = 1
bottomLabel.layer.shadowOffset = CGSize(width: 0, height: 0)
bottomLabel.layer.shadowOpacity = 1
bottomLabel.layer.shadowRadius = 2

I did find a suggestion to use a second label as a shadow but this did not give the desired result. Here is the code for that Label.

let bottomLabelShadow = UILabel(frame: CGRectMake(0, 1, maxWidth, 18)) 
bottomLabelShadow.backgroundColor = UIColor.clearColor()
bottomLabelShadow.textColor = UIColor.blackColor()
bottomLabelShadow.font = UIFont.boldSystemFontOfSize(16)
bottomLabelShadow.text = title
bottomLabelShadow.textAlignment = .Center
bottomLabelShadow.numberOfLines = 1
bottomLabelShadow.layer.shadowOffset = CGSize(width: 0, height: 0)
bottomLabelShadow.layer.shadowOpacity = 1
bottomLabelShadow.layer.shadowRadius = 2

3

Answers


  1. It seems to work for me in a playground. You just need to increase the shadow radius to make it appear as you want it.

    This is the exact playground code I used

    let view = UIView(frame: CGRectMake(0,0,100,20))
    view.backgroundColor = UIColor.yellowColor()
    
    let bottomLabel = UILabel(frame: CGRectMake(0, 0, 100, 20))
    bottomLabel.backgroundColor = UIColor.clearColor()
    bottomLabel.textColor = UIColor.whiteColor()
    bottomLabel.font = UIFont.boldSystemFontOfSize(18)
    bottomLabel.text = "Testing"
    bottomLabel.textAlignment = .Center
    bottomLabel.numberOfLines = 1
    bottomLabel.layer.shadowOffset = CGSize(width: 0, height: 0)
    bottomLabel.layer.shadowOpacity = 1
    bottomLabel.layer.shadowRadius = 6
    
    view.addSubview(bottomLabel)
    

    Or if you are using it over a blur view background, you could use vibrancy to achieve a better looking effect.

    enter image description here

    Login or Signup to reply.
  2. Rikola’s answer as Swift 3:

    import UIKit
    
    let view = UIView(frame: CGRect.init(x: 0, y: 0, width: 100, height: 20))
    view.backgroundColor = UIColor.yellow
    
    let bottomLabel = UILabel(frame: CGRect.init(x: 0, y: 0, width: 100, height: 20))
    bottomLabel.backgroundColor = UIColor.clear
    bottomLabel.textColor = UIColor.white
    bottomLabel.font = UIFont.boldSystemFont(ofSize: 18)
    bottomLabel.text = "Testing"
    bottomLabel.textAlignment = .center
    bottomLabel.numberOfLines = 1
    bottomLabel.layer.shadowOffset = CGSize(width: 0, height: 0)
    bottomLabel.layer.shadowOpacity = 1
    bottomLabel.layer.shadowRadius = 6
    
    view.addSubview(bottomLabel)
    

    Press the little “eye” when hoovering over the view.addSubview(bottomLabel) print in the right bar, for a visual representation of the label.

    Login or Signup to reply.
  3. //Try This! Hope this helps!!
    
    // Create a string
    let myString = "Shadow"
    
    // Create a shadow
    let myShadow = NSShadow()
    myShadow.shadowBlurRadius = 3
    myShadow.shadowOffset = CGSize(width: 3, height: 3)
    myShadow.shadowColor = UIColor.gray
    
    // Create an attribute from the shadow
    let myAttribute = [ NSShadowAttributeName: myShadow ]
    
    // Add the attribute to the string
    let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
    
    // set the attributed text on a label
    myLabel.attributedText = myAttrString
    

    As an extension:

    extension UILabel {
    
        func setTextWithShadow(_ string: String) {
    
            let shadow = NSShadow()
            shadow.shadowBlurRadius = 3
            shadow.shadowOffset = CGSize(width: 3, height: 3)
            shadow.shadowColor = UIColor.black.withAlphaComponent(0.5)
    
            let attributes = [ NSAttributedString.Key.shadow: shadow ]
            let attributedString = NSAttributedString(string: string, attributes: attributes)
    
            self.attributedText = attributedString
        }
    
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search