问题描述
无法为此 xib 的圆角设置计算值。仅在硬编码时才有效。那你有解决办法吗?更一般地说,这是制作 xib 的好方法吗?
这有效,但是是硬编码的
self.contentView.layer.cornerRadius = 12.0
这个效果太强了,显然没有计算正确的值。
self.contentView.layer.cornerRadius = self.frame.width / 2.0
测试了一些IBInspectable,BU问题是一样的。
// @IBInspectable
// var autoCalculateCornerRadius: Bool = false
// fileprivate var backingCornerRadius: CGFloat = 0
// @IBInspectable
// var cornerRadius: CGFloat {
// set { layer.cornerRadius = newValue }
// get { return layer.cornerRadius }
// }
// @IBInspectable
// var cornerRadius: CGFloat {
// set {
// backingCornerRadius = newValue
// self.layer.cornerRadius = newValue
// }
// get {
// return self.layer.cornerRadius
// }
// }
// override func layoutSubviews() {
// super.layoutSubviews()
// if autoCalculateCornerRadius {
// backingCornerRadius = cornerRadius
// cornerRadius = self.frame.width / 2.0
// } else {
// cornerRadius = backingCornerRadius
// }
// }
import UIKit
class MyCustomViewXib: UIView {
@IBOutlet weak var myImage: UIImageView!
@IBOutlet weak var myLabel: UILabel!
@IBOutlet var contentView: UIView! //the owner view itself
private var viewHeight: CGFloat = 0
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setup()
}
required override init(frame: CGRect) {
super.init(frame: frame)
self.setup()
}
deinit {
}
private func setup() {
Bundle.main.loadNibNamed("\(Self.self)",owner: self,options: nil)
addSubview(contentView)
// self.backgroundColor = .clear
viewHeight = contentView.frame.size.height
contentView.frame = self.bounds
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
contentView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
contentView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
self.myLabel.backgroundColor = .red
self.myImage.backgroundColor = .systemteal
self.contentView.backgroundColor = .systemGreen
self.contentView.layer.cornerRadius = 12.0
// self.contentView.layer.cornerRadius = self.frame.width / 2.0 too much
self.setNeedsLayout()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)