Làm thế nào để tạo UILabel theo lập trình bằng Swift?


115

Làm cách nào để tạo một UILabellập trình bằng Swift trong Xcode 6?

Tôi đã bắt đầu với một "Ứng dụng xem một lần" mới trong Xcode 6 và chọn Swift cho dự án này. Tôi có tập tin của tôi AppDelegate.swiftViewController.swiftvà tôi không biết phải làm gì từ đây.


1
Tôi đề nghị bạn bắt đầu nghiên cứu của mình tại đây: Swift tài liệu và làm việc theo cách của bạn để Raywenderlich Hướng dẫn
Prashant

Câu trả lời:


252
override func viewDidLoad()
{
  super.viewDidLoad()
  var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
  label.center = CGPointMake(160, 284)
  label.textAlignment = NSTextAlignment.Center
  label.text = "I'm a test label"
  self.view.addSubview(label)
}  

Cập nhật Swift 3.0+:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .center
label.text = "I'm a test label"
self.view.addSubview(label)

2
Bạn không cần phải mặc nhiên tuyên bố này như UILabel, nó suy ra từ UILabel ()
CW0007007

5
Bạn không nên mã cứng khung nhãn - điều gì sẽ xảy ra khi văn bản thay đổi hoặc văn bản được bản địa hóa và thay đổi số ký tự?
Zorayr

Bạn cũng có thể kiểm tra blog này mô tả lập trình thêm UITextField, UITextView và UILabel: webindream.com/how-to-change-ui-elements-programmatically
Farhad rubel

@iSuresh làm sao bạn biết rằng CGPoint (x: 160, y: 285) sẽ là trung tâm cho mô hình họ đang sử dụng?
Dave G

2
@rommex Để làm như vậy, hãy gọi label.sizeToFit () .
Josh Wolff

27

Đây là mã chính xác cho Swift 3, với các nhận xét cho mục đích hướng dẫn:

override func viewDidLoad()
{
    super.viewDidLoad()

    // CGRectMake has been deprecated - and should be let, not var
    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))

    // you will probably want to set the font (remember to use Dynamic Type!)
    label.font = UIFont.preferredFont(forTextStyle: .footnote)

    // and set the text color too - remember good contrast
    label.textColor = .black

    // may not be necessary (e.g., if the width & height match the superview)
    // if you do need to center, CGPointMake has been deprecated, so use this
    label.center = CGPoint(x: 160, y: 284)

    // this changed in Swift 3 (much better, no?)
    label.textAlignment = .center

    label.text = "I am a test label"

    self.view.addSubview(label)
}

Cảm ơn Gourav - hy vọng nó sẽ giúp ích
Gene Loparco

14

Chỉ để thêm vào các câu trả lời vốn đã tuyệt vời, bạn có thể muốn thêm nhiều nhãn vào dự án của mình, vì vậy việc thực hiện tất cả những điều này (kích thước thiết lập, kiểu dáng, v.v.) sẽ là một khó khăn. Để giải quyết vấn đề này, bạn có thể tạo một lớp UILabel riêng biệt.

  import UIKit

  class MyLabel: UILabel {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initializeLabel()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        initializeLabel()
    }

    func initializeLabel() {

        self.textAlignment = .left
        self.font = UIFont(name: "Halvetica", size: 17)
        self.textColor = UIColor.white

    }

}

Để sử dụng nó, hãy làm như sau

import UIKit

class ViewController: UIViewController {

     var myLabel: MyLabel()

     override func viewDidLoad() {
          super.viewDidLoad()

          myLabel = MyLabel(frame: CGRect(x: self.view.frame.size.width / 2, y: self.view.frame.size.height / 2, width: 100, height: 20))
          self.view.addSubView(myLabel)
     }


}

Chỉ cần những gì tôi đang tìm kiếm!
madprogramer

Cảm ơn bạn người đàn ông, tôi có một câu hỏi, nếu tôi muốn vượt qua một chuỗi self.textbên trong một lớp học để iniciate như thế này:myLabel = MyLabel(string: "text")
Daniel Beltrami

Tôi chỉ tìm hiểu cách sử dụng lớp học của bạn và gọi như thế này:myLabel.text = "text"
Daniel Beltrami

11

Swift 4.X và Xcode 10

let lbl = UILabel(frame: CGRect(x: 10, y: 50, width: 230, height: 21))
lbl.textAlignment = .center //For center alignment
lbl.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl.textColor = .white
lbl.backgroundColor = .lightGray//If required
lbl.font = UIFont.systemFont(ofSize: 17)

//To display multiple lines in label
lbl.numberOfLines = 0 //If you want to display only 2 lines replace 0(Zero) with 2.
lbl.lineBreakMode = .byWordWrapping //Word Wrap
// OR
lbl.lineBreakMode = .byCharWrapping //Charactor Wrap

lbl.sizeToFit()//If required
yourView.addSubview(lbl)

Nếu bạn có nhiều nhãn trong lớp của mình, hãy sử dụng tiện ích mở rộng để thêm thuộc tính.

//Label 1
let lbl1 = UILabel(frame: CGRect(x: 10, y: 50, width: 230, height: 21))
lbl1.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl1.myLabel()//Call this function from extension to all your labels
view.addSubview(lbl1)

//Label 2
let lbl2 = UILabel(frame: CGRect(x: 10, y: 150, width: 230, height: 21))
lbl2.text = "This is my label fdsjhfg sjdg dfgdfgdfjgdjfhg jdfjgdfgdf end..."
lbl2.myLabel()//Call this function from extension to all your labels
view.addSubview(lbl2)

extension UILabel {
    func myLabel() {
        textAlignment = .center
        textColor = .white
        backgroundColor = .lightGray
        font = UIFont.systemFont(ofSize: 17)
        numberOfLines = 0
        lineBreakMode = .byCharWrapping
        sizeToFit()
    }
}

8

Bạn có thể tạo nhãn bằng mã bên dưới. Đã cập nhật.

let yourLabel: UILabel = UILabel()
yourLabel.frame = CGRect(x: 50, y: 150, width: 200, height: 21)
yourLabel.backgroundColor = UIColor.orange
yourLabel.textColor = UIColor.black
yourLabel.textAlignment = NSTextAlignment.center
yourLabel.text = "test label"
self.view.addSubview(yourLabel)

5

Một mã khác swift3

let myLabel = UILabel()
    myLabel.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    myLabel.center = CGPoint(x: 0, y: 0)
    myLabel.textAlignment = .center
    myLabel.text = "myLabel!!!!!"
    self.view.addSubview(myLabel)

5

Một giải pháp thay thế bằng cách sử dụng bao đóng để tách mã thành một thứ gì đó gọn gàng hơn một chút bằng cách sử dụng Swift 4:

class theViewController: UIViewController {

    /** Create the UILabel */
    var theLabel: UILabel = {
        let label = UILabel()
        label.lineBreakMode = .byWordWrapping
        label.textColor = UIColor.white
        label.textAlignment = .left
        label.numberOfLines = 3
        label.font = UIFont(name: "Helvetica-Bold", size: 22)
        return label
    }()

    override func viewDidLoad() {
        /** Add theLabel to the ViewControllers view */
        view.addSubview(theLabel)
    }

    override func viewDidLayoutSubviews() {
        /* Set the frame when the layout is changed */
        theLabel.frame = CGRect(x: 0,
                                y: 0,
                                width: view.frame.width - 30,
                                height: 24)
    }
}

Lưu ý, các thuộc tính cho theLabelvẫn có thể được thay đổi bất cứ khi nào sử dụng các hàm trong VC. Bạn chỉ cần đặt các mặc định khác nhau bên trong đóng và giảm thiểu sự lộn xộn trong các chức năng nhưviewDidLoad()


Kỹ thuật đẹp ... nhưng nó không hoạt động với tôi trong Xcode 9.4.1 ... trừ khi tôi chỉ định khung ở đâu đó trong giá trị được tính toán, cho dù trong hàm tạo ( UILabel(frame:)) hay ở nơi khác trong khối ( label.frame=). Bất kỳ cài đặt nào sau đó của khung (ví dụ: in viewDidLayoutSubviews()) đều khiến nhãn không xuất hiện.
Glenn

5

Tạo dạng UILabelxem bên ngoài viewDidLoadlớp và sau đó thêm dạng xem đó vào dạng xem chính của bạn trong viewDidLoadphương thức.

lazy var myLabel: UILabel = {


    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "This is label view."
    label.font = UIFont.systemFont(ofSize: 12)
    return label
}()

Và sau đó thêm nó viewvàoviewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(myLabel)

    // Set its constraint to display it on screen
    myLabel.widthAnchor.constraint(equalToConstant:  200).isActive = true
    myLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    myLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}

@ I Love Coding, bạn có thể vui lòng giải thích về mã của bạn. [lazy var myLabel: UILabel = {} ()]. Nó sẽ hữu ích rất nhiều. Cảm ơn bạn ....
iOS

1
@iOS Khi bạn tạo biến vì lazy var variable_name = ""nó sẽ không tiêu tốn bộ nhớ của bạn trừ khi biến đó được ứng dụng của bạn gọi. Nếu thuộc tính đó không được sử dụng thì nó sẽ không bao giờ thực thi.
I Love Coding

Sau đó, chúng tôi sẽ tạo tất cả các biến dưới dạng lười biếng trong dự án của mình để có hiệu suất tốt hơn. Tôi nói đúng chứ?
iOS

@iOS vâng! Sử dụng tốt hơn loại biến đó trong ứng dụng của bạn để có hiệu suất tốt hơn. Ngoài ra, bạn cũng nên biết về Thread để có hiệu suất tốt hơn.
I Love Coding

3

Tạo nhãn nhanh chóng 4

 let label = UILabel(frame: CGRect(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: self.view.frame.size.width, height: 50))
    label.textAlignment = .center
    label.text = "Hello this my label"

    //To set the color
    label.backgroundColor = UIColor.white
    label.textColor = UIColor.black

    //To set the font Dynamic
    label.font = UIFont(name: "Helvetica-Regular", size: 20.0)

    //To set the system font
    label.font = UIFont.systemFont(ofSize: 20.0)

    //To display multiple lines
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping //Wrap the word of label
    label.lineBreakMode = .byCharWrapping //Wrap the charactor of label

    label.sizeToFit()
    self.view.addSubview(label)

1

Swift 4.2 và Xcode 10. Đâu đó trong ViewController:

private lazy var debugInfoLabel: UILabel = {
    let label = UILabel()
    label.textColor = .white
    label.translatesAutoresizingMaskIntoConstraints = false
    yourView.addSubview(label)
    NSLayoutConstraint.activate([
        label.centerXAnchor.constraint(equalTo: suggestionView.centerXAnchor),
        label.centerYAnchor.constraint(equalTo: suggestionView.centerYAnchor, constant: -100),
        label.widthAnchor.constraint(equalToConstant: 120),
        label.heightAnchor.constraint(equalToConstant: 50)])
    return label
}()

...

Sử dụng:

debugInfoLabel.text = debugInfo

0
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 285)
label.textAlignment = .center
label.text = "My label"
self.view.addSubview(label)

Thử mã trên trong ViewDidLoad


0

Swift 4.2 và Xcode 10 Khởi tạo nhãn trước viewDidLoad.

lazy var topLeftLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "TopLeft"
    return label
}()

Trong viewDidLoad thêm nhãn vào dạng xem và áp dụng các ràng buộc.

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(topLeftLabel)
    topLeftLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true
    topLeftLabel.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
}
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.