带有@IBDesigable/@IBInspectable 的故事板中的按钮上未显示圆角半径
Corner radius not showing on button in storyboard with @IBDesigable/@IBInspectable
我有这个按钮的自定义 class。
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = 10.0
}
override func awakeFromNib() {
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = 10.0
}
}
但是故事板中的按钮上没有显示圆角半径。
我知道@IBInspectable 只允许您更改检查器面板中的值。我想那不是我要找的。
我希望当我用那个 class 创建按钮时,角半径只显示在情节提要中。我认为这就是@IBDesignable 所做的。
您的代码在 IB 中崩溃,因此可设计性失败。这是更简单的代码:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = self.cornerRadiusValue
self.clipsToBounds = true
}
}
现在按钮既可检查又可设计:
它也适用于 运行 应用程序。
试试这个:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
这里有一个比公认答案更好的解决方案:
@IBDesignable
class DesignableButton: UIButton {
@IBInspectable private var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.masksToBounds = newValue > 0
layer.cornerRadius = newValue
}
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setNeedsDisplay()
}
}
它使用计算的 属性 来避免与存储的 属性 重复状态。
我有这个按钮的自定义 class。
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = 10.0
}
override func awakeFromNib() {
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = 10.0
}
}
但是故事板中的按钮上没有显示圆角半径。
我知道@IBInspectable 只允许您更改检查器面板中的值。我想那不是我要找的。
我希望当我用那个 class 创建按钮时,角半径只显示在情节提要中。我认为这就是@IBDesignable 所做的。
您的代码在 IB 中崩溃,因此可设计性失败。这是更简单的代码:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadiusValue: CGFloat = 10.0 {
didSet {
setUpView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
setUpView()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setUpView()
}
func setUpView() {
self.layer.cornerRadius = self.cornerRadiusValue
self.clipsToBounds = true
}
}
现在按钮既可检查又可设计:
它也适用于 运行 应用程序。
试试这个:
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
这里有一个比公认答案更好的解决方案:
@IBDesignable
class DesignableButton: UIButton {
@IBInspectable private var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.masksToBounds = newValue > 0
layer.cornerRadius = newValue
}
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setNeedsDisplay()
}
}
它使用计算的 属性 来避免与存储的 属性 重复状态。