我使用以下代码使用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;
它会创建shadow
和looks good too.
这里是上述代码的输出。
但是当我尝试向myTextView
添加文本时,我的textView文本超出了界限,它看起来像myTextView
之外,如下所示。
只有在我添加阴影时才会发生这种情况。 textView
内的文字并没有显示出奇怪的内容如果我不添加阴影。我做错了什么?我怎么能克服这个?为什么会这样?
更新
@borrrden
说
我发现它正在发生,因为设置maskToBounds = NO;
如果我们设置YES
那么我们就无法获得阴影。原因这是answer
答案 0 :(得分:6)
由于UIView行为,没有“正确”的解决方案。当masksToBounds为NO时,任何延伸到图层边界外的子图层都将可见。 UITextField在UITextField图层外滚动文本。
在UITextView后面添加清晰视图并在其上放一个阴影。
答案 1 :(得分: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];
答案 2 :(得分:1)
除了上一个答案,只需将原始uiTextView中的所有属性复制到帮助器视图:
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];