圆形 UITableViewCell 仅底角或顶角,但它不起作用 Swift iOS 10
Posted
技术标签:
【中文标题】圆形 UITableViewCell 仅底角或顶角,但它不起作用 Swift iOS 10【英文标题】:Rounded UITableViewCell only bottom or top corners but it doesn't work Swift iOS 10 【发布时间】:2018-06-06 11:39:12 【问题描述】:我想像这样将 2 个 UITableViewCell 的顶角和底角弄圆:这就是我在 ios 11 上得到的
What I want
但我在 iOS 10 上得到了这个:
Result rectShape.bounds = self.bounds
使用该代码:
蓝色视图的UITableViewCell
import UIKit
class ProductDescriptionTableViewCell: UITableViewCell
var ProductDescription: UITextView!
public var container: UIView!
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
override func layoutSubviews()
// Set the width of the cell
self.bounds = CGRect(x: self.bounds.origin.y + 16, y: self.bounds.origin.y, width: self.bounds.size.width - 16, height: self.bounds.size.height)
super.layoutSubviews()
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.backgroundColor = UIColor.blue
if #available(iOS 11.0, *)
self.layer.masksToBounds = true
self.layer.cornerRadius = 10
self.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMaxXMaxYCorner]
else
let rectShape = CAShapeLayer()
rectShape.bounds = self.bounds// CGRect(x: self.bounds.origin.x + 16, y: self.bounds.origin.y, width: self.bounds.size.width - 16, height: self.bounds.size.height)
rectShape.position = self.center
rectShape.path = UIBezierPath(roundedRect: rectShape.bounds, byRoundingCorners: [.bottomRight, .bottomLeft], cornerRadii: CGSize(width: 10, height: 10)).cgPath
self.layer.backgroundColor = UIColor.red.cgColor
//Here I'm masking the textView's layer with rectShape layer
self.layer.mask = rectShape
紫色视图的UITableViewCell
import UIKit
class ProductTitleTableViewCell: UITableViewCell
var ProductTitle: UILabel!
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
override func layoutSubviews()
// Set the width of the cell
self.bounds = CGRect(x: self.bounds.origin.y + 16, y: self.bounds.origin.y, width: self.bounds.size.width - 16, height: self.bounds.size.height)
super.layoutSubviews()
override init(style: UITableViewCellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.backgroundColor = UIColor.purple
if #available(iOS 11.0, *)
self.layer.masksToBounds = true
self.layer.cornerRadius = 10
self.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
else
let rectShape = CAShapeLayer()
rectShape.bounds = self.bounds//CGRect(x: self.bounds.origin.x + 16, y: self.bounds.origin.y, width: self.bounds.size.width - 16, height: self.bounds.size.height)
rectShape.position = self.center
rectShape.path = UIBezierPath(roundedRect: rectShape.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 10, height: 10)).cgPath
self.layer.backgroundColor = UIColor.green.cgColor
//Here I'm masking the textView's layer with rectShape layer
self.layer.mask = rectShape
如果我在评论中用 CGRect 替换 self.bounds 我得到了:
With rectShape.bounds = CGRect(x: self.bounds.origin.x + 16, y: self.bounds.origin.y, width: self.bounds.size.width - 16, height: self.bounds.size.height)
我尝试在 init() 开头更改 self.bounds,但它也不起作用
我还尝试将更改角的代码放在 layoutSubviews() 中,但在这种情况下 UITableViewCell 消失
我没有一个只使用一个 UITableViewCell 和圆角我真的需要圆底角和顶角以分隔 UITableViewCell
如果您知道我该如何解决,我将不胜感激 感谢您的宝贵时间
【问题讨论】:
【参考方案1】:添加以下扩展:
func roundCorners(_ corners:UIRectCorner, radius: CGFloat)
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
然后从布局子视图中调用它,如下所示:
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
headerView.roundCorners([UIRectCorner.topLeft, UIRectCorner.topRight], radius: kTableViewCornerRadius)
【讨论】:
【参考方案2】:嗯,我正在使用 UIView 这个非常简单的扩展来制作圆角。在 cellForRowAt 委托方法中,将单元格出列后,只需调用
cell.makeCornersRound()
extension UIView
public func makeCornersRound ()
self.layer.cornerRadius = 8
self.clipsToBounds = true
【讨论】:
以上是关于圆形 UITableViewCell 仅底角或顶角,但它不起作用 Swift iOS 10的主要内容,如果未能解决你的问题,请参考以下文章
如何在Objective C中仅弯曲UIView的顶角而不是整个视图?