2010-02-22 40 views

Trả lời

232

Bạn có thể thiết lập biên giới nhãn của qua bất động sản CALayer cơ bản của nó:

#import <QuartzCore/QuartzCore.h> 

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

Trình biên dịch khiếu nại rằng không có định nghĩa về borderColor và borderWidth trong CALayer. – Boon

+2

chúng chỉ có sẵn bắt đầu từ SDK 3.0: (Nếu bạn muốn chỉ là một giải pháp nhanh 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ó thể bạn đã quên '#import ' –

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]; 
+0

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

0

nó thực sự phụ thuộc vào có bao nhiêu sử dụng boarder trong quan điểm 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 này là nhanh hơn so với sản xuất một cái nhìn

15

Swift phiên bản:

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

Đối Swift 3:

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

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

+0

cảm ơn, đã chỉnh sửa câu trả lời – Esqarrouth

56

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

enter image description here

Đây là mã cho những 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ó nhu cầu nhập khẩu QuartzCore.

cũng

+1

Làm cách nào bạn có thể nhận được paddings? Văn bản của tôi đang chạm vào đường viền ... – 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 về kích thước trên chúng. – Suragch

0

Xem Sử dụng một chuỗi NSAttributedString cho các nhãn của bạn attributedText có lẽ là b của bạn đặt cược. Check out this example.

1

Swift 3/4 với @IBDesignable


Trong khi hầu như tất cả các giải pháp nêu trên hoạt động tốt nhưng tôi sẽ đề nghị một lớp @IBDesignable 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 
     } 
    } 
} 
Các vấn đề liên quan