3

我使用以下代码QuartzCore为我创建了一个阴影。UITextView

myTextView.layer.masksToBounds = NO;
myTextView.layer.shadowColor = [UIColor blackColor].CGColor;
myTextView.layer.shadowOpacity = 0.7f;
myTextView.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
myTextView.layer.shadowRadius = 8.0f;
myTextView.layer.shouldRasterize = YES;

它创建了一个shadowlooks good too.这是我上面代码的输出。

在此处输入图像描述

但是当我尝试向 中添加文本时myTextView,我的 textView 文本超出了范围,并且看起来超出了myTextView下面的内容。

在此处输入图像描述

仅当我添加 shadow 时才会发生。如果我不添加阴影,里面的文字textView不会显示奇怪。我做错了什么?我怎么能克服这个?为什么会这样?

更新:

@borrrden说我发现它正在发生,因为设置了maskToBounds = NO;If we set YESthen we cannot get shadow。原因这里有答案

4

3 回答 3

7

由于 UIView 行为,没有“正确”的解决方案。当 maskToBounds 为 NO 时,任何延伸到层边界之外的子层都将可见。并且 UITextField 在 UITextField 层之外滚动文本。

在 UITextView 后面添加清晰的视图并在其上放置阴影。

于 2012-11-22T06:17:26.060 回答
2

只需在您的 textView 下添加另一个 UIView 并将其图层设置为显示阴影(不要忘记将其背景颜色设置为清晰颜色以外的其他颜色 - 否则不会绘制阴影)

myTextView = [UITextView alloc] initWithFrame:CGRectMake(100,100,200,200);
UIView* shadowView = [UIView alloc] initWithFrame:myTextView.frame];
shadowView.backgroundColor = myTextView.backgroundColor;
shadowView.layer.masksToBounds = NO;
shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
shadowView.layer.shadowOpacity = 0.7f;
shadowView.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
shadowView.layer.shadowRadius = 8.0f;
shadowView.layer.shouldRasterize = YES;
[someView addSubview:shadowView];
[someView addSubView:myTextView];
于 2012-11-22T06:26:20.880 回答
1

除了上一个答案,只需将原始 uiTextView 中的所有属性复制到 helper 视图中即可:

UITextView *helperTextView = [[UITextView alloc] init];
helperTextView = textView;  //copy all attributes to the helperTextView;

shadowTextView = [[UIView alloc] initWithFrame:textView.frame];
shadowTextView.backgroundColor = textView.backgroundColor;
shadowTextView.layer.opacity = 1.0f;
shadowTextView.layer.masksToBounds = NO;
shadowTextView.layer.shadowColor = [UIColorFromRGB(0x00abff)CGColor];
shadowTextView.layer.shadowOpacity = 1.0f;
shadowTextView.layer.shadowOffset = CGSizeMake(1.0f, 1.0f);
shadowTextView.layer.shadowRadius = 10.0f;
shadowTextView.layer.cornerRadius = 8.0f;
shadowTextView.layer.shouldRasterize = YES;

[self.view addSubview:shadowTextView];
[self.view addSubview:helperTextView];
于 2017-02-07T15:30:30.270 回答