myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor
それは、境界線を描く簡単な答えです。しかし、問題は右と下だけに境界線を描く必要があることです。私はまた、上下に境界を描くために別のラベルが必要です。どのように4面すべてではなく、特定の面に境界線を描くことができますか?素早く描画するテキストビューやラベルの周りの境界線
myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor
それは、境界線を描く簡単な答えです。しかし、問題は右と下だけに境界線を描く必要があることです。私はまた、上下に境界を描くために別のラベルが必要です。どのように4面すべてではなく、特定の面に境界線を描くことができますか?素早く描画するテキストビューやラベルの周りの境界線
は、シェイプレイヤーを追加し、その層で線を引くことができます。レイヤーは自動レイアウトには参加しないので、viewDidLayoutSubviewsまたはuilabelのサブクラスにコードを配置し、レイアウトのサブビューでこれを行う必要があります。ここでUILabelサブクラスを使用して、遊び場の例である:
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
実際のラベルの境界線を使用できるかどうかわかりません。しかし、あなたはこれに似た何かをすることができます
public enum UIButtonBorderSide {
case Top, Bottom, Left, Right
}
extension UIButton {
public func addBorder(side: UIButtonBorderSide, color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.CGColor
switch side {
case .Top:
border.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: width)
case .Bottom:
border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: width)
case .Left:
border.frame = CGRect(x: 0, y: 0, width: width, height: self.frame.size.height)
case .Right:
border.frame = CGRect(x: self.frame.size.width - width, y: 0, width: width, height: self.frame.size.height)
}
self.layer.addSublayer(border)
}
}
それはおそらくそれを簡単に適応させることができます。
出典:https://gist.github.com/Isuru-Nanayakkara/496d5713e61125bddcf5
ホープこれは
の可能性のある重複[CALayerの:片側のみに境界線を追加](http://stackoverflow.com/questions/7022656/calayer-add-a-border -only-at-one-side) –