【问题标题】:swift drawing borders around textview or labels在文本视图或标签周围快速绘制边框
【发布时间】:2017-02-10 15:57:30
【问题描述】:
myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor

这是绘制边框的简单答案。但是问题是我只需要在右侧和底部绘制边框。我还需要另一个标签来在顶部和右侧绘制边框。如何在特定边上绘制边框,而不是全部 4 边?

【问题讨论】:

标签: swift border


【解决方案1】:

添加一个形状图层并在该图层中绘制线条。请注意,图层不参与自动布局,因此您需要将代码放入 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

【讨论】:

    【解决方案2】:

    我不确定您是否可以使用实际的标签边框来做到这一点。但是你可以做类似的事情

        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)
    }
    }
    

    那是 UIButton 的,但你可以很容易地适应它。

    来源:https://gist.github.com/Isuru-Nanayakkara/496d5713e61125bddcf5

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多