Swift-圆角类未应用于所有UIViews

时间:2019-04-10 08:40:44

标签: ios swift xcode

我正在尝试在我的视图中添加圆角。 我创建了一个课程:

class RoundedBorder: UIView {

override func awakeFromNib() {
    super.awakeFromNib()
    layer.cornerRadius = 10
}

}

然后我将其应用于我的3个UIView,但是只有中间的一个(如您所见)被更新。它们在堆栈视图中。

https://imgur.com/mEJR1uq

我的应用程序的其余部分具有针对各种对象元素的自定义类,都可以正常工作。

有什么想法吗?

谢谢

6 个答案:

答案 0 :(得分:0)

只需尝试此扩展程序

extension UIView {
    func roundCorners(by radius: CGFloat) {
        self.layer.cornerRadius = radius
        self.layer.masksToBounds = true
    }
}

并使用它:

self.roundCorners(by: 10)

答案 1 :(得分:0)

尝试一下!

这些是您可以使用的扩展,使半径阴影在按钮视图选项卡栏甚至导航栏中都可以,只需将此代码放在您的类末尾,在检查器的右侧,您可以看到可以帮助您的其他控制器:)

extension UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
        }
    }

    @IBInspectable
    var borderWidth: CGFloat {
        get {
            return layer.borderWidth
        }
        set {
            layer.borderWidth = newValue
        }
    }

    @IBInspectable
    var borderColor: UIColor? {
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.borderColor = color.cgColor
            } else {
                layer.borderColor = nil
            }
        }
    }

    @IBInspectable
    var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }

    @IBInspectable
    var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    @IBInspectable
    var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    @IBInspectable
    var shadowColor: UIColor? {
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color.cgColor
            } else {
                layer.shadowColor = nil
            }
        }
    }
}


@IBDesignable extension UIButton {

    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
        }
        get {
            return layer.cornerRadius
        }
    }

    @IBInspectable var borderColor: UIColor? {
        set {
            guard let uiColor = newValue else { return }
            layer.borderColor = uiColor.cgColor
        }
        get {
            guard let color = layer.borderColor else { return nil }
            return UIColor(cgColor: color)
        }
    }
}

答案 2 :(得分:0)

首先:确保将clipsToBounds设置为true。 第二:awakeFromNib()并不总是被调用。实例化视图的方式有很多。例如,使用情节提要板会是init吗?(编码器aDecoder:NSCoder)

如何创建一个涵盖所有方式的基类:

class YourView: UIView {    
init() {
    super.init(frame: .zero)
    setup()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

func setup() {
    // do your stuff
} 
}

答案 3 :(得分:0)

添加self.clipsToBounds = true

并分配类以查看为View Image

答案 4 :(得分:0)

尝试一下:-

extension UIView {

    @IBInspectable
    var cornerRadius: CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
         layer.cornerRadius = newValue
      }
   }
}

将此代码放入AppDeleagte

并转到storyboard,单击标签或视图以设置cornerRadius,然后转到属性并设置所需的半径。

enter image description here

并检查clipToBound = true

enter image description here

答案 5 :(得分:0)

 - self.view.layoutIfNeeded()

在设置视图的拐角半径之前使用此代码行,如果不起作用,请在设置半径之后再使用它。