Swift kullanarak programlı olarak UILabel nasıl oluşturulur?


115

UILabelSwift'i Xcode 6'da kullanarak programlı olarak nasıl oluşturabilirim ?

Xcode 6'da yeni bir "Tek Görünümlü Uygulama" ile başladım ve bu proje için Swift'i seçtim. Dosyalarım var AppDelegate.swiftve ViewController.swiftburadan ne yapacağımı bilmiyorum.


1
Çalışmanıza buradan başlamanızı öneririm: Swift dokümantasyonu ve Raywenderlich Tutorials
Prashant

Yanıtlar:


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

Swift 3.0+ Güncellemesi:

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
Bunu örtük olarak UILabel olarak bildirmenize gerek yok, UILabel ()
CW0007007

5
Etiket çerçevesini sabit kodlamamalısınız - metin değiştiğinde veya metin yerelleştirildiğinde ve karakter sayısını değiştirdiğinde ne olur?
Zorayr

UITextField, UITextView ve UILabel'i programlı olarak eklemeyi açıklayan bu blogu da kontrol edebilirsiniz: webindream.com/how-to-change-ui-elements-programmatically
farhad rubel

@iSuresh CGPoint'in (x: 160, y: 285) kullandıkları modelin merkezinde olacağını nereden biliyorsunuz?
Dave G

2
@rommex Bunu yapmak için label.sizeToFit () çağrısı yapın .
Josh Wolff

27

İşte Swift 3 için doğru kod, eğitim amaçlı yorumlarla birlikte:

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

Teşekkürler Gourav - umarım yardımcı olur
Gene Loparco

14

Sadece zaten harika cevaplara eklemek için, projenize birden çok etiket eklemek isteyebilirsiniz, bu nedenle tüm bunları yapmak (boyut, stil vb.) Bir acı olacaktır. Bunu çözmek için ayrı bir UILabel sınıfı oluşturabilirsiniz.

  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

    }

}

Kullanmak için aşağıdakileri yapın

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


}

Tam da aradığım şey!
madprogramer

Teşekkür ederim dostum, bir sorum var, eğer self.textbir sınıfa böyle bir başlangıç ​​yapmak için bir ip vermek istersem:myLabel = MyLabel(string: "text")
Daniel Beltrami

Sınıfınızı kullanarak ve şöyle seslenerek nasıl yapılacağını myLabel.text = "text"
öğreniyorum

11

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

Sınıfınızda birden fazla etiketiniz varsa, özellik eklemek için uzantıyı kullanın.

//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

Aşağıdaki kodu kullanarak bir etiket oluşturabilirsiniz. Güncellenmiş.

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

Başka bir kod 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

Swift 4 kullanarak kodu biraz daha düzgün bir şeye ayırmak için bir kapak kullanan bir alternatif:

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

Bir not olarak, VC'deki theLabelişlevler kullanıldığında için öznitelikler yine de değiştirilebilir. Yalnızca kapanış içinde çeşitli varsayılanlar ayarlıyorsunuz ve aşağıdaki gibi işlevlerde dağınıklığı en aza indiriyorsunuz:viewDidLoad()


Güzel teknik ... ama Xcode 9.4.1'de benim için çalışmıyor ... yapıcıda ( UILabel(frame:)) veya blokta ( label.frame=) başka bir yerde, hesaplanan değerde bir yerde çerçeveyi belirtmediğim sürece . Çerçevenin daha sonraki herhangi bir ayarı (örn., İçinde viewDidLayoutSubviews()) etiketin görünmemesine neden oldu.
Glenn

5

Sınıfın UILabeldışında görünüm oluşturun viewDidLoadve ardından bu görünümü viewDidLoadyöntemdeki ana görünümünüze ekleyin .

lazy var myLabel: UILabel = {


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

Ve sonra eklemek viewiçindeviewDidLoad()

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
}

@ Kodlamayı Seviyorum, lütfen kodunuzu açıklar mısınız? [tembel var myLabel: UILabel = {} ()]. Çok yardımcı olacak. Teşekkürler ....
iOS

1
@iOS Değişken oluşturduğunuzda lazy var variable_name = "", bu değişken uygulamanız tarafından çağrılmadıkça belleğinizi tüketmeyecektir. Bu özellik kullanılmazsa, asla çalıştırılmayacaktır.
I Love Kodlama

Daha sonra daha iyi performans için projemizde tüm değişkenleri tembel olarak oluşturacağız. Haklı mıyım
iOS

@iOS evet! Daha iyi performans için bu değişken türünü uygulamanızda daha iyi kullanın. Ayrıca, daha iyi performans için Thread'ın da farkında olmalısınız.
I Love Kodlama

3

Swift 4'te etiket oluşturun

 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 ve Xcode 10. ViewController'da bir yerde:

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

...

Kullanımı:

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)

ViewDidLoad'da yukarıdaki kodu deneyin


0

Swift 4.2 ve Xcode 10, viewDidLoad'dan önce etiketi başlatın.

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

ViewDidLoad'da görünüme etiket ekleyin ve kısıtlamaları uygulayın.

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
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.