除 iPhone XS max 和 XR 外,圆角不适用于所有模拟器
Round corners is not working in all simulators except iPhone XS max and XR
我正在为我的集合视图单元格使用圆角,这在 iPhone XS Max 和 XR 中工作正常,但在其他人中不显示圆角。下面是我正在使用的代码。
class ButtonCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var buttonImage: UIImageView!
@IBOutlet weak var buttonTitle: UILabel!
@IBOutlet weak var cellBackGroundView: UIView!
@IBOutlet weak var imageWidthContraint: NSLayoutConstraint!
@IBOutlet weak var imageHeightContraint: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
self.applyShadow(shadowColor: UIColor.gray, shadowRadious: 4, shadowOpacity: 1)
makeRoundedCorners()
}
func makeRoundedCorners() {
cellBackGroundView.roundCorners(corners: .allCorners, radius: 15)
}
func setupImageSize(cellType : String){
if cellType == "12" {
imageWidthContraint.constant = 40
imageHeightContraint.constant = 50
}else if cellType == "13"{
imageWidthContraint.constant = 62
imageHeightContraint.constant = 34
}
}
}
extension UIView {
func roundCorners(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
layer.mask = mask
mask.path = path.cgPath
}
}
使用类似这样的东西
cell.layer.cornerRadius = 10
cell.layer.masksToBounds = true
我认为你不需要 func roundCorners(corners: UIRectCorner, radius: CGFloat)
你可以试试这个
extension UIView {
func roundCorners(radius: CGFloat) {
self.layer.masksToBounds = true
self.layer.cornerRadius = radius
}
}
就故障排除而言,我推荐以下步骤。
在你的模拟器中打印出 cornerRadius
,然后给它赋值。就我而言,我无意中将 0 分配给它。
(lldb) po style.cornerRadius
6.0
(lldb) po layer.cornerRadius
0.0
原因是我有一个计算值拼写错误,它正在分配视图的当前角半径。
var sytle: Style {
.init(cornerRadius: layer.cornerRadius, bgColor: backgroundColor)
}
我正在为我的集合视图单元格使用圆角,这在 iPhone XS Max 和 XR 中工作正常,但在其他人中不显示圆角。下面是我正在使用的代码。
class ButtonCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var buttonImage: UIImageView!
@IBOutlet weak var buttonTitle: UILabel!
@IBOutlet weak var cellBackGroundView: UIView!
@IBOutlet weak var imageWidthContraint: NSLayoutConstraint!
@IBOutlet weak var imageHeightContraint: NSLayoutConstraint!
override func awakeFromNib() {
super.awakeFromNib()
self.applyShadow(shadowColor: UIColor.gray, shadowRadious: 4, shadowOpacity: 1)
makeRoundedCorners()
}
func makeRoundedCorners() {
cellBackGroundView.roundCorners(corners: .allCorners, radius: 15)
}
func setupImageSize(cellType : String){
if cellType == "12" {
imageWidthContraint.constant = 40
imageHeightContraint.constant = 50
}else if cellType == "13"{
imageWidthContraint.constant = 62
imageHeightContraint.constant = 34
}
}
}
extension UIView {
func roundCorners(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
layer.mask = mask
mask.path = path.cgPath
}
}
使用类似这样的东西
cell.layer.cornerRadius = 10
cell.layer.masksToBounds = true
我认为你不需要 func roundCorners(corners: UIRectCorner, radius: CGFloat)
你可以试试这个
extension UIView {
func roundCorners(radius: CGFloat) {
self.layer.masksToBounds = true
self.layer.cornerRadius = radius
}
}
就故障排除而言,我推荐以下步骤。
在你的模拟器中打印出 cornerRadius
,然后给它赋值。就我而言,我无意中将 0 分配给它。
(lldb) po style.cornerRadius
6.0
(lldb) po layer.cornerRadius
0.0
原因是我有一个计算值拼写错误,它正在分配视图的当前角半径。
var sytle: Style {
.init(cornerRadius: layer.cornerRadius, bgColor: backgroundColor)
}