Bagaimana cara membuat UILabel secara terprogram menggunakan Swift?

115

Bagaimana cara membuat secara UILabelterprogram menggunakan Swift di Xcode 6?

Saya telah mulai dengan "Aplikasi Tampilan Tunggal" baru di Xcode 6 dan memilih Swift untuk proyek ini. Saya memiliki file saya AppDelegate.swiftdan ViewController.swiftdan saya tidak yakin apa yang harus dilakukan dari sini.

Akhtar
sumber
1
Saya sarankan Anda memulai studi Anda di sini: Dokumentasi cepat dan lanjutkan
Prashant

Jawaban:

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

Pembaruan 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)
iSuresh
sumber
2
Anda tidak perlu secara implisit mendeklarasikan ini sebagai UILabel, ini disimpulkan dari UILabel ()
CW0007007
5
Anda tidak boleh membuat kode keras pada bingkai label - apa yang terjadi ketika teks berubah atau teks dilokalkan dan mengubah jumlah karakter?
Zorayr
Anda juga dapat memeriksa blog ini yang menjelaskan tentang penambahan secara terprogram UITextField, UITextView dan UILabel: webindream.com/how-to-change-ui-elements-programmatically
farhad rubel
@iSuresh bagaimana Anda tahu bahwa CGPoint (x: 160, y: 285) akan menjadi pusat model yang mereka gunakan?
Dave G
2
@rommex Untuk melakukannya, panggil label.sizeToFit () .
Josh Wolff
27

Berikut adalah kode yang benar untuk Swift 3, dengan komentar untuk tujuan instruksional:

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)
}
Gene Loparco
sumber
Terima kasih Gourav - semoga membantu
Gene Loparco
14

Hanya untuk menambahkan jawaban yang sudah bagus, Anda mungkin ingin menambahkan beberapa label dalam proyek Anda sehingga melakukan semua ini (ukuran pengaturan, gaya, dll) akan merepotkan. Untuk mengatasi ini, Anda dapat membuat kelas UILabel terpisah.

  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

    }

}

Untuk menggunakannya, lakukan hal berikut

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


}
Cyril
sumber
Hanya apa yang saya cari!
programer gila
Terima kasih self.textkawan , saya punya pertanyaan, jika saya ingin memberikan string ke dalam kelas untuk memimpin seperti ini:myLabel = MyLabel(string: "text")
Daniel Beltrami
Saya hanya mencari tahu caranya, menggunakan kelas Anda dan menelepon seperti ini:myLabel.text = "text"
Daniel Beltrami
11

Swift 4.X dan 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)

Jika Anda memiliki beberapa label di kelas Anda, gunakan ekstensi untuk menambahkan properti.

//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()
    }
}
iOS
sumber
8

Anda dapat membuat label menggunakan kode di bawah ini. Diperbarui.

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)
Tushar Korde
sumber
5

Kode lain 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)
Ryosuke Hujisawa
sumber
5

Alternatif menggunakan closure untuk memisahkan kode menjadi sesuatu yang sedikit lebih rapi menggunakan 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)
    }
}

Sebagai catatan, atribut untuk theLabelmasih bisa diubah setiap kali menggunakan fungsi di VC. Anda hanya menyetel berbagai default di dalam closure dan meminimalkan kekacauan dalam fungsi sepertiviewDidLoad()

Archdoog
sumber
Teknik yang indah ... tetapi tidak berhasil untuk saya di Xcode 9.4.1 ... kecuali saya menentukan bingkai di suatu tempat di nilai yang dihitung, baik di konstruktor ( UILabel(frame:)) atau di tempat lain di blok ( label.frame=). Pengaturan frame selanjutnya (mis., Dalam viewDidLayoutSubviews()) menyebabkan label tidak muncul.
Glenn
5

Buat UILabeltampilan di luar viewDidLoadkelas dan kemudian tambahkan tampilan tersebut ke tampilan utama Anda di viewDidLoadmetode.

lazy var myLabel: UILabel = {


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

Dan kemudian menambahkan bahwa viewdiviewDidLoad()

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
}
Saya Suka Coding
sumber
@Saya Suka Coding, dapatkah Anda menjelaskan tentang kode Anda. [lazy var myLabel: UILabel = {} ()]. Ini akan sangat membantu. Terima kasih ....
iOS
1
@iOS Saat Anda membuat variabel karena lazy var variable_name = ""tidak akan menghabiskan memori Anda kecuali variabel itu dipanggil oleh aplikasi Anda. Jika properti itu tidak digunakan maka tidak akan pernah dijalankan.
I Love Coding
Kemudian kami akan membuat semua variabel sebagai malas dalam proyek kami untuk kinerja yang lebih baik. Apakah saya benar?
iOS
@iOS ya! Lebih baik gunakan jenis variabel itu di aplikasi Anda untuk performa yang lebih baik. Selain itu, Anda juga harus mengetahui Thread untuk kinerja yang lebih baik.
Saya Suka Coding
3

Buat label dengan cepat 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)
Bhavisha Khatri
sumber
1

Swift 4.2 dan Xcode 10. Di suatu tempat di 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
}()

...

Menggunakan:

debugInfoLabel.text = debugInfo
Olga Grineva
sumber
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)

Coba kode di atas di ViewDidLoad


sumber
0

Swift 4.2 dan Xcode 10 Inisialisasi label sebelum viewDidLoad.

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

Dalam viewDidLoad tambahkan label ke tampilan dan terapkan batasan.

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
}
Sudhi 9135
sumber