web-dev-qa-db-fra.com

Comment appliquer le texte Shadow sur UITEXTVIEW?

En fait j'aime UILabel. Ils sont gentils. Maintenant, je devais aller à UITextView parce que UILabel ne correspond pas au texte verticalement au sommet. Mince. Une chose dont j'ai vraiment besoin est une ombre de texte. UILabel l'a. UITextView semble ne pas l'avoir. Mais je suppose que ce mec utilise juste le même sous-jacent UIKit _ _ NSString ajouts ?? Peut-être que quelqu'un a déjà une solution pour ce problème? Que ferais-je écraser?

44
text.layer.shadowColor = [[UIColor whiteColor] CGColor];
text.layer.shadowOffset = CGSizeMake(1.0f, 1.0f);
text.layer.shadowOpacity = 1.0f;
text.layer.shadowRadius = 1.0f;

Et n'oubliez pas d'ajouter le dessus:

#import <QuartzCore/QuartzCore.h>
155
adjwilli

La réponse avec

text.layer.shadowcolor

ajoute une ombre à TextView, peut-être que cela fonctionne, mais il ajoute des ombres non seulement au texte.

La bonne réponse est:

CALayer *textLayer = ((CALayer *)[textView.layer.sublayers objectAtIndex:0]);
textLayer.shadowColor = [UIColor whiteColor].CGColor;
textLayer.shadowOffset = CGSizeMake(0.0f, 1.0f);
textLayer.shadowOpacity = 1.0f;
textLayer.shadowRadius = 1.0f;
15
Nikita

Swift


let textView = UITextView(frame: view.frame)
textView.font = UIFont(name: "Helvetica", size: 64.0)
textView.textColor = .red
textView.text = "Hello World"

textView.layer.shadowColor = UIColor.black.cgColor
textView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
textView.layer.shadowOpacity = 1.0
textView.layer.shadowRadius = 2.0
textView.layer.backgroundColor = UIColor.clear.cgColor

Swift 2.


let textView = UITextView(frame: view.frame)
textView.font = UIFont(name: "Helvetica", size: 64.0)
textView.textColor = UIColor.redColor()
textView.text = "Hello World"    

textView.layer.shadowColor = UIColor.blackColor().CGColor
textView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
textView.layer.shadowOpacity = 1.0
textView.layer.shadowRadius = 2.0
textView.layer.backgroundColor = UIColor.clearColor().CGColor
12
Leo Dabus

enter image description here

Cet exemple Swift Swift utilise la méthode de chaîne attribuée d'ajout de Shadow au texte. Voir Cette réponse Pour plus d'informations sur les chaînes attribuées à Swift. Cette méthode (par opposition à l'utilisation de méthode de couche ) vous donne la flexibilité pour définir l'ombre sur une plage de texte si vous le souhaitez.

// 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 = [ NSAttributedStringKey.shadow: myShadow ]

// Add the attribute to the string
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)

// set the attributed text on a label
myLabel.attributedText = myAttrString // can also use with UITextView

Mise à jour pour Swift 4

10
Suragch

Dans iOS 6+ Utiliser un texte attribué

NSShadow * shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor blackColor];
shadow.shadowOffset = CGSizeMake(2, 2);

NSDictionary * textAttributes =
@{ NSForegroundColorAttributeName : [UIColor blueColor],
   NSShadowAttributeName          : shadow,
   NSFontAttributeName            : [UIFont boldSystemFontOfSize:20] };

textView.attributedText = [[NSAttributedString alloc] initWithString:@"Hello" 
                                                          attributes:textAttributes];

Hello example

9
Robert

Swift 4, Swift 4.2, Swift 5 et une solution simple et élégante, peut utiliser facilement à partir de l'interface Builder

extension UIView {
    /* The color of the shadow. Defaults to opaque black. Colors created
     * from patterns are currently NOT supported. Animatable. */
    @IBInspectable var shadowColor: UIColor? {
        set {
            layer.shadowColor = newValue!.cgColor
        }
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            else {
                return nil
            }
        }
    }

    /* The opacity of the shadow. Defaults to 0.4 Specifying a value outside the
     * [0,1] range will give undefined results. Animatable. */
    @IBInspectable var shadowOpacity: Float {
        set {
            layer.shadowOpacity = newValue
        }
        get {
            return layer.shadowOpacity
        }
    }

    /* The shadow offset. Defaults to (1, 2). Animatable. */
    @IBInspectable var shadowOffset: CGPoint {
        set {
            layer.shadowOffset = CGSize(width: newValue.x, height: newValue.y)
        }
        get {
            return CGPoint(x: layer.shadowOffset.width, y:layer.shadowOffset.height)
        }
    }

    /* The blur radius used to create the shadow. Defaults to 3. Animatable. */
    @IBInspectable var shadowRadius: CGFloat {
        set {
            layer.shadowRadius = newValue
        }
        get {
            return layer.shadowRadius
        }
    }
}
0
midhun p

Cela dépend de la version d'iOS que vous utilisez. Commençant par iOS 6 Il existe une seule ombre prise en charge, vous avez défini cela comme un attribut sur une nsattributedstring que vous avez ensuite défini sur l'étiquette.

0
Cocoanetics