iOS 带有阴影的圆角 UITextField

12

我想为我的UITextField添加阴影效果,目前实现的效果如下: enter image description here
从图中可以看出,阴影在角落处没有圆角。 我的代码:

        mNickname.layer.borderWidth = 1
        mNickname.layer.borderColor = UIColor.whiteColor().CGColor
        mNickname.layer.cornerRadius = 3

        mNickname.layer.masksToBounds = false
        mNickname.layer.shadowRadius = 3.0
        mNickname.layer.shadowColor = UIColor.blackColor().CGColor
        mNickname.layer.shadowOffset = CGSizeMake(1.0, 1.0)
        mNickname.layer.shadowOpacity = 1.0

移除borderColor和borderWidth。 - Hamza Ansari
当我将它们移除时,textField 就不再是圆形的了。 - Radoslav Yordanov
你也移除了cornerRadius吗? - Hamza Ansari
不,因为我希望我的textField是圆角的。 - Radoslav Yordanov
6个回答

30

好的,我找到了问题。原来我在使用矩形边框时:

enter image description here

正确的代码应该是:

enter image description here

代码如下:

mNickname.layer.masksToBounds = false
mNickname.layer.shadowRadius = 3.0
mNickname.layer.shadowColor = UIColor.blackColor().CGColor
mNickname.layer.shadowOffset = CGSizeMake(1.0, 1.0)
mNickname.layer.shadowOpacity = 1.0

结果:

enter image description here


2

试试这个,代码是用Objective C编写的,但对于Swift也是一样的。

self.textField.layer.shadowColor = [[UIColor blackColor] CGColor];
    self.textField.layer.shadowOffset = CGSizeMake(0.0, 1.0);
    self.textField.layer.shadowOpacity = 1;
    self.textField.layer.shadowRadius = 0.0;

2
extension UITextField {

    func addShadowToTextField(color: UIColor = UIColor.gray, cornerRadius: CGFloat) {

    self.backgroundColor = UIColor.white
    self.layer.masksToBounds = false
    self.layer.shadowColor = color.cgColor
    self.layer.shadowOffset = CGSize(width: 0, height: 0)
    self.layer.shadowOpacity = 1.0
    self.backgroundColor = .white
    self.layer.cornerRadius = cornerRadius
   }
}

添加扩展和使用方法:

    dateTxtFld.addShadowToTextField(cornerRadius: 3)
    dateTxtFld.addShadowToTextField(color: UIColor.blackColor, cornerRadius: 3)

backgroundColor是一个关键字。 - MJ Studio
是的,textfield的backgroundColor很关键,有人知道为什么吗? - T.Jurko

1
尝试将shadowOpacity更改为0.5。 此外,您能否发送此textField的完整自定义设置?

1
你可以使用这个扩展。
extension ViewController {
    func setShadow(_ view: UIView) {
        view.layer.masksToBounds = false;
        view.layer.shadowRadius  = 3.0;
        view.layer.shadowColor   = UIColor.black.cgColor;
        view.layer.shadowOffset  = CGSize(width: 2.0, height: 4.0);
        view.layer.shadowOpacity = 1.0;
    }
}

0

你试过这个吗? mNickname.layer.masksToBounds = true;


当我将其设置为true时,阴影不再可见。 - Radoslav Yordanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接