Có cách nào để UILabel vẽ đường viền xung quanh chính nó không? Điều này rất hữu ích cho tôi để gỡ lỗi vị trí văn bản và để xem vị trí và mức độ lớn của nhãn thực sự.Làm thế nào để vẽ đường viền quanh nhãn UILabel?
Trả lời
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;
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 đề 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
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
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
nó sẽ là 'myLabel.layer.borderColor = UIColor.blackColor(). CGColor!' – Shruti
cảm ơn, đã chỉnh sửa câu trả lời – Esqarrouth
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ó.
Đâ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
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.
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
}
}
}
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
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
Nếu trình biên dịch phàn nàn thì có thể bạn đã quên '#import ' –