Làm thế nào để vẽ đường viền xung quanh một UILabel?


140

Có cách nào để UILabel vẽ đường viền xung quanh nó không? Điều này hữu ích cho tôi để gỡ lỗi vị trí văn bản và để xem vị trí và nhãn thực sự lớn như thế nào.

Câu trả lời:


260

Bạn có thể đặt đường viền của nhãn thông qua thuộc tính CALayer bên dưới:

#import <QuartzCore/QuartzCore.h>

myLabel.layer.borderColor = [UIColor greenColor].CGColor
myLabel.layer.borderWidth = 3.0

Swift 5:

myLabel.layer.borderColor = UIColor.darkGray.cgColor
myLabel.layer.borderWidth = 3.0

2
chúng chỉ khả dụng khi bắt đầu SDK 3.0 :( Nếu bạn chỉ muốn một giải pháp nhanh chóng cho mục đích gỡ lỗi, bạn có thể đặt nền màu bán trong suốt cho nhãn của mình.
Vladimir

36
Nếu trình biên dịch phàn nàn thì có lẽ bạn đã quên#import <QuartzCore/QuartzCore.h>
Stefan Arentz

1
@Vladimir Giải pháp này là thêm đường viền cho tất cả các mặt của nhãn. Chúng ta có thể thêm đường viền chỉ bên phải của nhãn không ???
chinthakad

1
@chinthakad, không. Tôi nghĩ bạn sẽ cần lớp con nhãn tùy chỉnh với bản vẽ tùy chỉnh cho điều đó
Vladimir

3
Trong Swift, dòng đầu tiên sẽ đọc:myLabel.layer.borderColor = UIColor.greenColor().CGColor
Roshambo

71

Dưới đây là một số điều bạn có thể làm với UILabelvà biên giới của nó.

nhập mô tả hình ảnh ở đây

Đây là mã cho các nhãn:

import UIKit
class ViewController: UIViewController {

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    @IBOutlet weak var label5: UILabel!
    @IBOutlet weak var label6: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // label 1
        label1.layer.borderWidth = 1.0

        // label 2
        label2.layer.borderWidth = 5.0
        label2.layer.borderColor = UIColor.blue.cgColor

        // label 3
        label3.layer.borderWidth = 2.0
        label3.layer.cornerRadius = 8

        // label 4
        label4.backgroundColor = UIColor.cyan

        // label 5
        label5.backgroundColor = UIColor.red
        label5.layer.cornerRadius = 8
        label5.layer.masksToBounds = true

        // label 6
        label6.layer.borderWidth = 2.0
        label6.layer.cornerRadius = 8
        label6.backgroundColor = UIColor.yellow
        label6.layer.masksToBounds = true
    }
}

Lưu ý rằng trong Swift không cần phải nhập QuartzCore.

Xem thêm


1
Làm thế nào bạn có thể có được những miếng đệm? Văn bản của tôi chạm vào biên giới ...
eestein

1
@eestein, tôi nghĩ rằng tôi vừa kéo kích thước nhãn lớn hơn trong Trình tạo giao diện. Hoặc tôi có thể đã đặt các ràng buộc kích thước trên chúng.
Suragch

19

Phiên bản Swift:

myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.greenColor().CGColor

Dành cho Swift 3:

myLabel.layer.borderWidth = 0.5
myLabel.layer.borderColor = UIColor.green.cgColor

1
nó sẽ làmyLabel.layer.borderColor = UIColor.blackColor().CGColor!
Shruti

7

Swift 3/4 với @IBDesignable


Mặc dù hầu hết tất cả các giải pháp trên đều hoạt động tốt nhưng tôi sẽ đề xuất một @IBDesignablelớp tùy chỉnh cho việc này.

@IBDesignable
class CustomLabel: UILabel {

    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

    @IBInspectable var borderColor: UIColor = UIColor.white {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 2.0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }
}

2

Bạn có thể sử dụng repo này: GSBorderLabel

Nó khá đơn giản:

GSBorderLabel *myLabel = [[GSBorderLabel alloc] initWithTextColor:aColor
                                                     andBorderColor:anotherColor
                                                     andBorderWidth:2];

Điều này liên quan đến đường viền xung quanh các ký tự thực tế trong văn bản, câu hỏi đang nói về đường viền xung quanh hình chữ nhật mà văn bản được chứa trong.
jjxtra 26/03/13

1

Thuộc tính UILabel BorderColor, BorderWidth, angleRadius trong Swift 4

@IBOutlet weak var anyLabel: UILabel!
   override func viewDidLoad() {
        super.viewDidLoad()
        anyLabel.layer.borderColor = UIColor.black.cgColor
        anyLabel.layer.borderWidth = 2
        anyLabel.layer.cornerRadius = 5
        anyLabel.layer.masksToBounds = true
}

1

Giải pháp cho Swift 4:

yourLabel.layer.borderColor = UIColor.green.cgColor


0

nó thực sự phụ thuộc vào số lượng nội dung sử dụng trong chế độ xem của bạn, đôi khi, chỉ cần thêm một UIVIEW có kích thước lớn hơn một chút để tạo đường viền. phương pháp nhanh hơn tạo ra một khung nhìn


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.