2010-05-17 13 views
41

Eigentlich liebe ich UILabel. Sie sind süß. Jetzt musste ich zu UITextView gehen, weil UILabel Text nicht vertikal nach oben ausrichtet. Verdammt. Eine Sache, die ich wirklich brauche, ist ein Textschatten. UILabel hat es. UITextView scheint es nicht zu haben. Aber ich denke, dass dieser Typ nur die gleichen zugrunde liegenden UIKitNSString Ergänzungen verwendet ?? Vielleicht hat jemand schon eine Lösung für dieses Problem? Was würde ich überschreiben?Wie man Textschatten auf UITextView anwendet?

+2

Ich denke, aktualisiert Sie adjwilli Antwort akzeptieren sollte, weil es einfach ant ist Ich denke, die meisten werden zustimmen, dass es der richtige Weg ist, es zu tun. – Lukas

Antwort

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

Und vergessen Sie nicht oben zu addieren:

#import <QuartzCore/QuartzCore.h> 
+1

Die Antwort, die richtig markiert wird, wird funktionieren, nehme ich an, aber ihre unordentliche und allgemein schlechte Form. – averydev

+2

Ich wünschte, ich könnte dies weiter markieren - das ist die geeignete Möglichkeit, einen Schatten zu einem UITextView hinzuzufügen. Die andere Methode ist sehr schwer und nicht die Art und Weise, die für alles andere als nur triviale Anwendungen von UITextView getan werden sollte. –

+0

seltsames Verhalten: Dieser Ansatz fügt dem Text selbst Schatten hinzu, nicht dem Feld uitextview. Ich möchte der Box Schatten hinzufügen, nicht dem Text. –

14

Die Antwort mit

text.layer.shadowColor

Schatten auf ganze Textview fügt hinzu: vielleicht funktioniert es, aber es fügt Schatten nicht nur dem Text hinzu.

Die richtige Antwort lautet:

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; 
+0

Es ist der richtige Weg mit editierbaren Textview – zszen

0

Es ist auf der iOS-Version ab, die Sie verwenden. Ab iOS 6 wird ein einzelner Schatten unterstützt, den Sie als Attribut für einen NSAtributedString festlegen, den Sie dann auf dem Label festlegen.

8

Ios 6+ Verwendung zugeschrieben Text

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

+0

Leider kann es nicht bearbeitet werden – zszen

9

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 
9

enter image description here

Dieses Swift Beispiel verwendet die zugeschrieben String-Methode Schatten der Zugabe zum Text. Weitere Informationen zu attributierten Strings in Swift finden Sie unter this answer. Diese Methode (im Gegensatz zur Verwendung der layer method) gibt Ihnen die Flexibilität, den Schatten auf eine Reihe von Text festzulegen, wenn Sie möchten.

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

für Swift 4

+0

Dies funktionierte gut für mich. Vielen Dank. – adev

Verwandte Themen