在以下函数中,我定义了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置于其父视图控制器中,我将非常感激!
答案 0 :(得分:10)
这里的问题是您的中心正在设置之前。由于您在没有框架参数的情况下创建视图,因此框架为{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))
答案 1 :(得分:2)
设置尺寸后,您必须设置视图的中心。这是因为在设置视图的大小或框架之前,其框架rect是(x:0,y:0,width:0,height:0)。如果然后立即设置其中心,则大小为零的视图将居中,因此其新帧rect可以是(x:20,y:20,width:0,height:0)(如果父视图为40x40)。如果您现在更改视图的大小,视图的原点将不会实际移动,因此新帧可能是(x:20,y:20,其中:5,高度:5),这意味着视图是不再居中。
因此,要使视图居中,您必须首先设置其大小及其中心。