myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor
这是绘制边框的简单答案。但是问题是我只需要在右侧和底部绘制边框。我还需要另一个标签在顶部和右侧绘制边框。如何在特定边上绘制边框,而不是所有 4 个边?
最佳答案
添加一个形状图层并在该图层中绘制线条。请注意,图层不参与自动布局,因此您需要将代码放在 viewDidLayoutSubviews 或子类 uilabel 中,并在布局 subview 中执行此操作。这是一个使用 UILabel 子类的 Playground 示例:
import PlaygroundSupport
import UIKit
class L: UILabel {
var strokeColor = UIColor.blue
var strokeWidth = CGFloat(0.5)
private lazy var labelBorderLayer:CAShapeLayer = {
let shapeLayer = CAShapeLayer()
self.layer.addSublayer(shapeLayer)
return shapeLayer
}()
override func layoutSubviews() {
super.layoutSubviews()
let path = CGMutablePath()
path.move(to: CGPoint(x: 0, y: bounds.size.height))
path.addLine(to: CGPoint(x: bounds.size.width, y: bounds.size.height))
path.addLine(to: CGPoint(x: bounds.size.width, y: 0))
labelBorderLayer.path = path
labelBorderLayer.strokeColor = strokeColor.cgColor
labelBorderLayer.lineWidth = strokeWidth
labelBorderLayer.fillColor = UIColor.clear.cgColor
}
}
let v = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
let l = L(frame: v.frame.insetBy(dx: 50, dy: 80))
v.addSubview(l)
l.textColor = .white
l.textAlignment = .center
l.text = "gjgkjgjgjgj"
v.backgroundColor = .red
PlaygroundPage.current.liveView = v
关于在 textview 或标签周围快速绘制边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163559/