Как центрировать UILabel в Swift?

Я пытаюсь центрировать текст, но он, похоже, не работает.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        let title = UILabel()
        title.text = "Some Sentence"
        title.numberOfLines = 0
        title.frame = CGRectMake(self.view.bounds.size.width/2,50,self.view.bounds.size.width, self.view.bounds.size.height) // x , y, width , height
        title.textAlignment = .Center
        title.sizeToFit()
        title.backgroundColor = UIColor.redColor()
        self.view.addSubview(title)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

это код, который я использую, но это то, что я получаю:

enter image description here

это не центр экрана. Может кто подскажет что я делаю не так?

4 ответов


чтобы центрировать UILabel просто добавьте эту строку

x и y:

title.center = self.view.center

x:

title.center.x = self.view.center.x

y:

title.center.y = self.view.center.y

Автоматический Макет

чтобы сделать ваше приложение будущим доказательством, используйте автоматические якоря макета вместо установки рамки.

1. Отключить translatesAutoresizing

titleLabel.translatesAutoresizingMaskIntoConstraints = false

2. Добавить ограничения CenterX & CenterY

titleLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true

titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

3. Установите выравнивание текста UILabel в центр

titleLabel.textAlignment = .center

Preview


на самом деле то, что вы делаете, это ввод текста внутри UILabel. То, что вы хотите сделать, это центрировать ярлык. Для этого вы можете сделать:

title.frame.origin = CGPoint(x: x, y: y)

Если вы хотите центрировать по горизонтали можно сделать:

title.frame.origin = CGPoint(x: self.view.frame.width / 2, y: yValue)

также, если вы хотите центрировать значение x и y вашей метки, Вы можете сделать:

title.frame.origin = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.height / 2)

SWIFT 4

это работает для меня и, кажется, более перспективное. Это также работает для многострочных меток.

override func loadView() {
    self.view = UIView()

    let message = UILabel()
    message.text = "This is a test message that should be centered."
    message.translatesAutoresizingMaskIntoConstraints = false
    message.lineBreakMode = .byWordWrapping
    message.numberOfLines = 0
    message.textAlignment = .center

    self.view.addSubview(message)

    message.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    message.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    message.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}