Swift 将UILabel放置在屏幕中央

Swift 将UILabel放置在屏幕中央,swift,sprite-kit,uilabel,skscene,cgpoint,Swift,Sprite Kit,Uilabel,Skscene,Cgpoint,我有一个UILabel,我希望它显示在屏幕中央,无论它在哪个iPhone上播放 但我做不好!它总是在别的地方,而不是在中间。 我做错了什么 这是正在发生的事情的图片和代码 最好的选择是自动布局。您可以将其设置为垂直和水平对齐以查看。无论显示或方向如何,它都可以工作 您可以使用interface builder,也可以添加autolayoutconstraints,我认为您的标签实际上是居中的 如果我像这样添加红色背景色: label.backgroundColor = UIColor.redC

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

但我做不好!它总是在别的地方,而不是在中间。 我做错了什么

这是正在发生的事情的图片和代码


最好的选择是自动布局。您可以将其设置为垂直和水平对齐以查看。无论显示或方向如何,它都可以工作


您可以使用interface builder,也可以添加autolayoutconstraints,我认为您的标签实际上是居中的

如果我像这样添加红色背景色:

label.backgroundColor = UIColor.redColor()
并将垂直中心更改为屏幕的中心,即更改示例中的此行:

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

label.center = CGPoint(x: w / 2, y: h / 2)
我的结论是:

所以,标签实际上是居中的。但是,文本在标签中未居中,这使得在没有背景色时,文本似乎未居中

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

最后一个代码示例如下所示:

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在评论中所建议的那样,研究一下这个问题,这样你的标签就成为了
SKScene
的一个组成部分,而不是固定在外部
UIView
上的东西(如果你觉得有意义的话)


希望这对您有所帮助。

只需在IB中添加两个约束即可(在容器中水平和垂直居中标签)。但你为什么需要UILabel?UILabel将添加到视图中,而不是场景中。在转换到其他场景时,这可能需要额外的处理(处置)。有一个SKLabelNode,虽然没有UILabel强大,但它是本机的SpriteKit组件。@OsaamaShehzad不客气,很高兴您能使用它,并在使用过程中学习了一些关于居中对齐文本的知识。不要觉得自己愚蠢…我们都在那里…每天:)如果你认为答案对你有帮助,请随意将其标记为已接受:)
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)
}