如何使用内部阴影创建圆角UITextField

我正在将UITextfield定制为看起来像UISearchbar

我喜欢这样的

 self.back_textfield = [[UITextField alloc]initWithFrame:CGRectMake(5, 7, 310, 30)]; [self.back_textfield setBorderStyle:UITextBorderStyleRoundedRect]; self.back_textfield.layer.cornerRadius = 15.0; 

但我明白这一点:

在此处输入图像描述

正如您所看到的,内部阴影不会跟随边界。

我猜UITextField上的背景是一个图像,所以它不会跟随你的角半径。
在iOS中创建内部阴影很棘手。 你有2个选择。
1)使用图像作为UITextField背景
2)以编程方式设置阴影(但它看起来不如选项1吸引人)。

下面是使用@Matt Wilding的解决方案为文本字段设置圆形内部阴影的代码

 _textField.layer.cornerRadius = 10.0f; CAShapeLayer* shadowLayer = [CAShapeLayer layer]; [shadowLayer setFrame:_textField.bounds]; // Standard shadow stuff [shadowLayer setShadowColor:[[UIColor colorWithWhite:0 alpha:1] CGColor]]; [shadowLayer setShadowOffset:CGSizeMake(0.0f, 0.0f)]; [shadowLayer setShadowOpacity:1.0f]; [shadowLayer setShadowRadius:4]; // Causes the inner region in this example to NOT be filled. [shadowLayer setFillRule:kCAFillRuleEvenOdd]; // Create the larger rectangle path. CGMutablePathRef path = CGPathCreateMutable(); CGPathAddRect(path, NULL, CGRectInset(_textField.bounds, -42, -42)); // Add the inner path so it's subtracted from the outer path. // someInnerPath could be a simple bounds rect, or maybe // a rounded one for some extra fanciness. CGPathRef someInnerPath = [UIBezierPath bezierPathWithRoundedRect:_textField.bounds cornerRadius:10.0f].CGPath; CGPathAddPath(path, NULL, someInnerPath); CGPathCloseSubpath(path); [shadowLayer setPath:path]; CGPathRelease(path); [[_textField layer] addSublayer:shadowLayer]; CAShapeLayer* maskLayer = [CAShapeLayer layer]; [maskLayer setPath:someInnerPath]; [shadowLayer setMask:maskLayer]; 

别忘了导入

 #import  

QuartzCore FrameWork添加到您的项目中

并将其添加到.m文件中

 #import  

并使用

 self.back_textfield.layer.borderWidth = 1.0f; // set as you per your requirement self.back_textfield.layer.cornerRadius = 5.2f; // set as you per your requirement