Realmente me encanta UILabel. Son dulces. Ahora tenía que ir a UITextView porque UILabel no es alinear el texto verticalmente en la parte superior. Maldita sea. Una cosa que realmente necesito es una sombra de texto. UILabel tiene. UITextView parece que no lo tienen. Pero supongo que ese tipo se usa la misma UIKit NSString adiciones?? Tal vez alguien ya tiene una solución para ese problema? ¿Qué iba a sobrescribir?

  • creo que se debe aceptar adjwilli respuesta, porque es fácil hormiga creo que la mayoría estará de acuerdo en que es la manera correcta de hacerlo.

7 Comentarios

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

    Y no te olvides de añadir en la parte de arriba:

    #import <QuartzCore/QuartzCore.h>
    • La respuesta marcada como correcta funcionará supongo, pero desordenado y en general la falta de forma.
    • Me gustaría poder marcar esto aun más, esta es la forma apropiada para añadir una sombra a un UITextView. El otro método es muy pesado manos y no en todo el camino que se debe hacer otra cosa que no sea muy trivial usos de UITextView.
    • comportamiento extraño: este enfoque añade sombra al texto en sí, no a la uitextview cuadro. Me gustaría añadir una sombra a la caja, no al texto.
    • Esto funciona perfectamente, la amabilidad de la marca esto como una respuesta alternativa 🙂
    • texto.la capa.masksToBounds = NO; es necesario también
    • Solo utiliza el código exacto en adjwilli la respuesta y funcionó perfectamente sin necesidad de nada más. GRACIAS, hombre.
    • textView del fondo se debe establecer como clearColor en orden para que esto funcione

  2. 15

    La respuesta con

    de texto.la capa.shadowColor

    añade sombra a todo el textView, quizás funciona, pero se añade la sombra no sólo al texto.

    La respuesta correcta es:

    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;
    • Es la mejor manera, con editables textview
  3. 12

    Swift 3


    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.3


    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
  4. 9

    Cómo aplicar sombra de texto a UITextView?

    Este Swift ejemplo utiliza el atribuida método de cadena de adición de sombra al texto. Ver esta respuesta para obtener más información sobre atribuido cadenas en Swift. Este método (en oposición al uso de la método de la capa de) le da la flexibilidad para ajustar la sombra en un rango de texto si usted desea.

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

    Actualizado para Swift 4

    • Esto funcionó muy bien para mí. Gracias.
  5. 8

    En iOS 6+ uso atribuido de texto

    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];

    Cómo aplicar sombra de texto a UITextView?

    • Lamentablemente no se puede editar
  6. 0

    Depende de la versión de iOS que está utilizando. Comienzo con iOS 6 no hay una sola sombra apoyo, que establece que como un atributo de un NSAttributedString que, a continuación, establezca enla etiqueta.

  7. 0

    swift 4, swift 4.2, swift 5 y por encima de
    Solución sencilla y elegante , puede utilizar desde el interface builder fácilmente

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

Dejar respuesta

Please enter your comment!
Please enter your name here