尝试在 Swift 中将 UILabel 居中

Attempting at centering UILabel in Swift

我正在尝试将 UILabel 居中,但它似乎没有响应。这是我的直觉代码,但我确定它远非执行此操作的最佳方法..

    let sanskritLabel  = UILabel(frame: CGRectZero)
        sanskritLabel.text = page!.sanskrit!
        sanskritLabel.frame.size.width  = self.view.frame.size.width
        sanskritLabel.textAlignment     = .Center
        sanskritLabel.numberOfLines     = 0
        sanskritLabel.layer.borderColor       = UIColor.cyanColor().CGColor
        sanskritLabel.layer.borderWidth       = 3.0;
        sanskritLabel.center            = CGPointMake(self.view.frame.width/2, verse.frame.origin.y + chapterStringSize.height + 20)
        sanskritLabel.sizeToFit()

我在这个下方的其他 UILabel 上使用了它,它们似乎居中。在这种情况下,此 UILabel sanskritLabel 显示为向左浮动:

这很奇怪,因为我明确表示 width 应该是 self.view.frame.size.width ,但它似乎忽略了这一点。

我想如果宽度设置为与我声明的完全一样 ( 375 ),那么由于 .textAlignment 属性,文本会很好地居中。

知道为什么这不起作用吗?

您正在调用更新标签框架的 sizeToFit

- sizeToFit
Resizes and moves the receiver view so it just encloses its subviews.

正如 Jonah 所说,在使用 center 设置 frame 之后,您正在使用 sizeToFit 调整视图大小。因此,当调整视图大小时,它会更改 size 但保持不变 origin。要解决此问题,请在设置 center:

之前调用 sizeToFit
sanskritLabel.sizeToFit()
sanskritLabel.center = CGPointMake(self.view.frame.width/2, verse.frame.origin.y + chapterStringSize.height + 20)