在 textview 或标签周围快速绘制边框

标签 swift border

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/

相关文章:

ios - Fabric 的 Shell 脚本调用错误

css - 如何仅在 TABLE 中的第一个 TR 中删除 TD 边框

CSS 边框锯齿状,带有不同大小/颜色的边框

html - CSS - 调整浏览器窗口大小时固定边框宽度变化

ios - 当应用程序处于后台甚至被用户终止时,在 iOS 上无需移动即可获取用户位置

ios - 从左侧滑动 UIBarButtonItem

ios - Swift 3 Azure Blob 存储数据(图像、视频)使用 SAS 上传

ios - 从 HealthKit 中提取时的额外字符

css - 边界重叠问题

c++ - 使用 GDI 在我的窗口周围绘制边框不起作用?