Swift를 사용하여 프로그래밍 방식으로 UILabel을 만드는 방법은 무엇입니까?


115

UILabelXcode 6에서 Swift를 사용하여 프로그래밍 방식으로 어떻게 생성 합니까?

저는 Xcode 6에서 새로운 "Single View Application"으로 시작했고이 프로젝트를 위해 Swift를 선택했습니다. 내 파일이 AppDelegate.swiftViewController.swift나는 확실히 여기에서 무엇을해야하는지 모르겠어요.


1
여기에서 연구를 시작하는 것이 좋습니다 : Swift 문서화Raywenderlich Tutorials
Prashant

답변:


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+ 업데이트 :

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
당신은이) UILabel의 (추론 것, 암시 적으로 UILabel의로 선언 할 필요가 없습니다
CW0007007

5
라벨 프레임을 하드 코딩해서는 안됩니다. 텍스트가 변경되거나 텍스트가 현지화되고 문자 수를 변경하면 어떻게됩니까?
Zorayr

: 당신은 또한 프로그램의 UITextField, UITextView와 UILabel의 추가 설명이 블로그 확인할 수 있습니다 webindream.com/how-to-change-ui-elements-programmatically
여보 루블

@iSuresh CGPoint (x : 160, y : 285)가 사용중인 모델의 중심이 될 것이라는 것을 어떻게 알 수 있습니까?
Dave G

2
@rommex 그렇게하려면 label.sizeToFit ()를 호출 합니다.
Josh Wolff

27

다음은 지침 용 주석이 포함 된 Swift 3의 올바른 코드입니다.

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

감사합니다 Gourav은 - 희망이 도움이
유전자 Loparco에게

14

이미 훌륭한 답변에 추가하기 위해 프로젝트에 여러 레이블을 추가 할 수 있으므로이 모든 작업 (크기, 스타일 설정 등)을 수행하는 것이 어려울 것입니다. 이를 해결하기 위해 별도의 UILabel 클래스를 만들 수 있습니다.

  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

    }

}

사용하려면 다음을 수행하십시오.

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


}

내가 찾던 것!
madprogramer

내가 문자열을 전달하려면 내가 질문이 있습니다, 당신은 인간 감사 self.text:이 같은 iniciate하는 클래스 내에myLabel = MyLabel(string: "text")
다니엘 벨트 라미

클래스를 사용하여 호출하는 방법, 난 그냥 알아이 같은 :myLabel.text = "text"
다니엘 벨트 라미

11

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

클래스에 여러 레이블이있는 경우 확장을 사용하여 속성을 추가합니다.

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

아래 코드를 사용하여 라벨을 만들 수 있습니다. 업데이트되었습니다.

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

또 다른 코드 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를 사용하여 코드를 좀 더 깔끔하게 분리하기 위해 클로저를 사용하는 대안 :

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

참고로 theLabelVC의 기능을 사용할 때마다 속성을 변경할 수 있습니다. 클로저 내부에 다양한 기본값을 설정하고 다음과 같은 기능의 혼란을 최소화합니다.viewDidLoad()


아름다운 기술 ...하지만 Xcode 9.4.1에서 작동하지 않습니다 ... 생성자 ( UILabel(frame:)) 또는 블록의 다른 곳 ( ) 에서 계산 된 값의 어딘가에 프레임을 지정하지 않는 한 label.frame=. 나중에 프레임을 설정하면 (예 :에서 viewDidLayoutSubviews()) 레이블이 나타나지 않습니다.
Glenn

5

만들기 UILabel보기 외부의 viewDidLoad클래스를 다음에 기본보기에 그보기를 추가 viewDidLoad하는 방법.

lazy var myLabel: UILabel = {


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

그리고 그 추가 viewviewDidLoad()

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, 코드에 대해 설명해 주시겠습니까? [lazy var myLabel : UILabel = {} ()]. 많은 도움이 될 것입니다. .... 주셔서 감사합니다
아이폰 OS

1
@iOS 변수를 만들 때 lazy var variable_name = ""해당 변수가 앱에서 호출되지 않는 한 메모리를 소비하지 않습니다. 해당 속성이 사용되지 않으면 실행되지 않습니다.
I 사랑은 코딩

그런 다음 더 나은 성능을 위해 프로젝트에서 모든 변수를 lazy로 만듭니다. 내가 맞아?
iOS

@iOS 예! 더 나은 성능을 위해 앱에서 해당 변수 유형을 더 잘 사용하십시오. 또한 더 나은 성능을 위해 스레드도 인식 할 수 있어야합니다.
I Love Coding

3

Swift 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 및 Xcode 10. 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
}()

...

사용 :

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에서 위의 코드를 시도하십시오.


0

Swift 4.2 및 Xcode 10 viewDidLoad 전에 라벨을 초기화합니다.

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

viewDidLoad에서 뷰에 레이블을 추가하고 제약 조건을 적용합니다.

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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.