UIView 出现错误的中心位置

UIView appears with wrong center position

在下面的函数中,我定义了 UIView 的所有必要特征:

func OpenController() {
    var gameOverView: UIView = UIView()

    gameOverView.center = super.view.center
    gameOverView.frame.size = CGSize(width: 200, height: 300)
    gameOverView.backgroundColor = UIColor.grayColor()

    self.view.addSubview(gameOverView)
}

即使我将 UIView "gameOverView" 的中心定义为它所在的 viewcontroller 的中心,它在 viewcontroller 的中心出现一个角而不是以 viewcontroller 为中心。我尝试了各种其他定义位置的方法(NSLayoutConstraints、frame.x、frame.y 等),但都有这个结果。

如果有人能告诉我为什么会发生这种情况以及如何将 UIView 在其父视图控制器中居中,我将不胜感激!

您必须在设置视图大小后设置视图的中心。这是因为在设置视图的大小或框架之前,其框架矩形是 (x:0,y:0,width:0,height:0)。如果您随后立即设置它的中心,那么大小为零的视图将居中,因此它的新框架矩形可能是 (x:20,y:20,width:0,height:0)(如果父视图是 40x40)。如果现在更改视图的大小,视图的原点实际上不会移动,因此新框架可能是 (x:20,y:20,with:5,height:5),这意味着视图不再居中。

因此,要使视图居中,您必须首先设置其大小和中心。

你的问题是你的中心设置在框架之前。由于您创建的视图没有 frame 参数,因此您的 frame 是 {0, 0}。

所以您当前正在使子视图居中然后调整它的大小,所以发生了这种情况:

您需要做的是调整子视图的大小然后将其居中,如下所示:

所以你可以交换你的居中和取景逻辑:

gameOverView.frame.size = CGSize(width: 200, height: 300)
gameOverView.center = super.view.center

否则更容易在创建视图时传递框架(您甚至可以传递适当的 x、y 坐标以使其在此处居中):

var gameOverView: UIView = UIView(frame: CGRectMake(0, 0, 200, 300))