边框裁剪成圆角? Swift
Borders are cropped with rounded corners? Swift
我看到了一些关于这个主题的问题,但它们只是其中一个问题的答案。我从一侧圆角:
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.masksToBounds = true
self.layer.mask = mask
}
和实施:
detailsView.roundCorners(.allCorners, radius: 20)
然后,我尝试通过以下方式添加边框:
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)
case UIRectEdge.bottom:
border.frame = CGRect(x:0, y: frame.height - thickness, width: frame.width, height:thickness)
case UIRectEdge.left:
border.frame = CGRect(x:0, y:0, width: thickness, height: frame.height)
case UIRectEdge.right:
border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)
default: do {}
}
border.backgroundColor = color.cgColor
addSublayer(border)
}
和实施:
detailsView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
我做错了什么?我得到了这个结果——边框被裁剪了:
self.layer.masksToBounds = true
裁剪边框。
你必须在另一个视图中使用两个视图来解决这个问题。同时为两个视图设置相同的框架。
在子视图中使用
childView.roundCorners(.allCorners, radius: 20)
在父视图中使用
parentView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
我将顶角圆角化了:
func roundCorners(radius: CGFloat, mask: CACornerMask) {
cornerRadius = radius
maskedCorners = mask
实施:
detailsView.layer.roundCorners(radius: 20, mask: [.layerMinXMinYCorner, .layerMaxXMinYCorner])
边框:
extension UIView {
@IBInspectable var borderWidthV: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable var borderColorV: UIColor? {
get {
return UIColor(cgColor: layer.borderColor!)
}
set {
layer.borderColor = newValue?.cgColor
}
}
}
之后,我刚刚将白色 UIView 添加到我的视图底部以隐藏底部边框。
我看到了一些关于这个主题的问题,但它们只是其中一个问题的答案。我从一侧圆角:
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.masksToBounds = true
self.layer.mask = mask
}
和实施:
detailsView.roundCorners(.allCorners, radius: 20)
然后,我尝试通过以下方式添加边框:
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {
let border = CALayer()
switch edge {
case UIRectEdge.top:
border.frame = CGRect(x: 0, y: 0, width: frame.width, height: thickness)
case UIRectEdge.bottom:
border.frame = CGRect(x:0, y: frame.height - thickness, width: frame.width, height:thickness)
case UIRectEdge.left:
border.frame = CGRect(x:0, y:0, width: thickness, height: frame.height)
case UIRectEdge.right:
border.frame = CGRect(x: frame.width - thickness, y: 0, width: thickness, height: frame.height)
default: do {}
}
border.backgroundColor = color.cgColor
addSublayer(border)
}
和实施:
detailsView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
我做错了什么?我得到了这个结果——边框被裁剪了:
self.layer.masksToBounds = true
裁剪边框。
你必须在另一个视图中使用两个视图来解决这个问题。同时为两个视图设置相同的框架。
在子视图中使用
childView.roundCorners(.allCorners, radius: 20)
在父视图中使用
parentView.layer.addBorder(edge: .top, color: .lightLavender, thickness: 1)
我将顶角圆角化了:
func roundCorners(radius: CGFloat, mask: CACornerMask) {
cornerRadius = radius
maskedCorners = mask
实施:
detailsView.layer.roundCorners(radius: 20, mask: [.layerMinXMinYCorner, .layerMaxXMinYCorner])
边框:
extension UIView {
@IBInspectable var borderWidthV: CGFloat {
get {
return layer.borderWidth
}
set {
layer.borderWidth = newValue
}
}
@IBInspectable var borderColorV: UIColor? {
get {
return UIColor(cgColor: layer.borderColor!)
}
set {
layer.borderColor = newValue?.cgColor
}
}
}
之后,我刚刚将白色 UIView 添加到我的视图底部以隐藏底部边框。