在以下函数中,我定义了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置于其父视图控制器的中心,我将不胜感激!

最佳答案

您的问题是将中心设置在框架之前。由于创建的视图没有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))

10-02 02:23