2

我一直在寻找一种简单的方法来为 UITextView 的文本添加阴影,就像你可以在 UILabel 中做的那样。我发现这个问题的答案应该是这样做的,但是,为什么会这样是没有意义的。

问题:给 UITextView 本身的图层添加阴影不应该影响里面的文本,而是应该影响整个对象,对吧?

在我的情况下,即使将阴影添加到 textview 的图层也没有任何效果(即使在添加 QuartzCore 标头之后)。

4

2 回答 2

8

我试过了,发现你应该将 UITextView 的背景色设置为透明,这样阴影应该可以工作

    UITextView *text = [[[UITextView alloc] initWithFrame:CGRectMake(0, 0, 150, 100)] autorelease];
    text.layer.shadowColor = [[UIColor whiteColor] CGColor];
    text.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
    text.layer.shadowOpacity = 1.0f;
    text.layer.shadowRadius = 1.0f;
    text.textColor  = [UIColor blackColor];

            //here is important!!!!
    text.backgroundColor = [UIColor clearColor];

    text.text = @"test\nok!";
    text.font = [UIFont systemFontOfSize:50];

    [self.view addSubview:text];

这是效果

于 2012-05-25T06:01:00.887 回答
6

@adali 的答案会起作用,但它是错误的。您不应该将阴影添加到UITextView自身以影响内部的可见视图。如您所见,通过UITextView对光标应用阴影也会产生阴影。

应该使用的方法是 with NSAttributedString

NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:textView.text];
NSRange range = NSMakeRange(0, [attString length]);

[attString addAttribute:NSFontAttributeName value:textView.font range:range];
[attString addAttribute:NSForegroundColorAttributeName value:textView.textColor range:range];

NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor whiteColor];
shadow.shadowOffset = CGSizeMake(0.0f, 1.0f);
[attString addAttribute:NSShadowAttributeName value:shadow range:range];

textView.attributedText = attString;

但是textView.attributedText对于iOS6。如果您必须支持较低版本,您可以使用以下方法。

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 = 0.0f;
于 2013-05-16T06:41:54.803 回答