将UILabel放在屏幕中央

时间:2016-08-14 08:51:26

标签: swift sprite-kit uilabel skscene cgpoint

我有一个 UILabel 我希望它显示在屏幕的中央,无论它在哪个iPhone上播放!

但我无法正确行事!它始终位于其他地方但不在中间。

我做错了什么?

以下是正在发生的事情的图片和代码!

so not in the middle!

class end: SKScene {

    var label = UILabel()


    override func didMoveToView(view: SKView) {
        scene?.backgroundColor = UIColor(red: CGFloat(59.0/255.0), green: CGFloat(89.0/255.0), blue: CGFloat(152.0/255.0), alpha: CGFloat(1.0))

        let w = UIScreen.mainScreen().bounds.width
        let h = UIScreen.mainScreen().bounds.height
        label = UILabel(frame: CGRect(x: w / 2, y: h / 2, width: 120, height: 30))
        label.text = "REPLAY"
        label.center = CGPoint(x: w / 2, y: 2)
        label.textColor = UIColor.whiteColor()
        self.view?.addSubview(label)

2 个答案:

答案 0 :(得分:9)

我认为你的标签实际上是 居中。

如果我添加红色背景颜色:

label.backgroundColor = UIColor.redColor()

并将垂直中心更改为屏幕的中心,即在示例中更改此行:

label.center = CGPoint(x: w / 2, y: 2)

到此:

label.center = CGPoint(x: w / 2, y: h / 2)

我最终得到了这个:

centered label but not centered text

因此,标签实际上是居中的。但是,文本不在标签的中心,这使得当您没有背景颜色时,文本似乎没有居中。

如果我将textAlignment更改为.Center并再次删除背景颜色,我最终会得到以下结果:

centered text in centered label

最终的代码示例如下所示:

override func didMoveToView(view: SKView) {
    scene?.backgroundColor = UIColor(red: CGFloat(59.0/255.0), green: CGFloat(89.0/255.0), blue: CGFloat(152.0/255.0), alpha: CGFloat(1.0))

    let w = UIScreen.mainScreen().bounds.width
    let h = UIScreen.mainScreen().bounds.height

    label = UILabel(frame: CGRect(x: w / 2, y: h / 2, width: 120, height: 30))
    label.text = "REPLAY"
    label.center = CGPoint(x: w / 2, y: h / 2)
    label.textAlignment = .Center
    label.textColor = UIColor.whiteColor()
    self.view?.addSubview(label)
}

如果说了这些话,那么也许你应该在评论中调查@whirlwind建议的SKLabelNode,这样你的标签就会成为SKScene的一个集成部分,而不是用螺栓固定到外部UIView(如果这对你有意义的话)。

希望这会对你有所帮助。

答案 1 :(得分:0)

最佳选择是自动布局。您可以将其垂直和水平对齐以进行查看。无论显示或方向如何,它都有效。

您可以使用任一界面构建器,也可以添加autolayoutconstraints