UILabel 未显示在视图中心 - Xcode 游乐场

UILabel isn't Displaying at Center of View - Xcode Playground

我在 Xcode 游乐场上有以下代码 运行。但是,即使我指定标签位于视图的中心,它也不会出现在那里。

import UIKit
import PlaygroundSupport

class TestViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white

        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
        label.center = CGPoint(x: view.frame.width / 2, y: view.frame.height / 2)
        label.text = "Hello World!"
        label.textColor = UIColor.black
        view.addSubview(label)
    }
}

PlaygroundPage.current.liveView = TestViewController()

view frame 在触发viewDidLoad 时未完成,需要在方法viewDidLayoutSubviews 中设置label 的frame,因为此方法在view bound 时被调用敲定。

尝试

class TestViewController: UIViewController {

    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white

        label.text = "Hello World!"
        label.textColor = UIColor.black
        self.view.addSubview(label)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        self.label.center = self.view.center
    }
} 

视图控制器的视图框架在 viewDidLoad 中不是最终的。

您需要设置标签的 autoresizingMask 或应用约束以使其保持在中心。

并且由于您使标签比文本更宽,因此您还需要将标签的 textAlignment 设置为 center

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
label.center = view.center
label.text = "Hello World!"
label.textColor = .black
label.textAlignment = .center // or call label.sizeToFit()
label.autoresizingMask = [ .flexibleTopMargin, .flexibleBottomMargin, .flexibleLeftMargin, .flexibleRightMargin, ]
view.addSubview(label)