2015-07-21 129 views

回答

1

您可以在设置完框后设置center属性。

moviePlayer.view.center = self.view.center; 

还有一个考虑 - 如果moviePlayer.viewself.view一个子视图,不使用self.view.frame。考虑改用self.view.bounds

为中心垂直

CGPoint center = self.view.center; 
center.y = //whatever you need 
moviePlayer.view.center = center; 

更新

正如@Antonio提到的,它只能如果self.view的左上角是屏幕左上角本身。

更好的办法

CGPoint center = CGPointMake(CGRectGetMidX(self.view.bounds), <#Whatever you need#>); 
moviePlayer.view.center = center; 

不过,我仍然建议使用NSLayoutConstraints更大的好=)

值得考虑

但是,设置帧这种方式是不是最好的 - 你将被迫计算每个视图的位置和大小manualy。如果您的布局很简单,请使用autoresizingMaskcontentMode。像那样

//after setting moviePlayer.view.frame 
moviePlayer.view.autoresizingMask = UIViewAutoresizingNone; 
self.view.contentMode = UIViewContentModeCenter; 

如果您的内容不够简单,请使用NSLayoutConstraint s。此外,使用它你可以市中心仅通过一个轴(垂直或水平)

+0

谢谢你,工作正常,但有一些办法可以居中只在垂直方向? – Steve

+1

'moviePlayer.view.center = self.view.center;''可能不会在这里工作。 'center'属性是视图中心在超级视图坐标系中的位置,由于'self.view'是这种情况下的超级视图,'self.view.center'只有在self.view'左上角在窗口的左上角。如果你用'CGRectMake(CGRectGetMidX(self.view.bounds),CGRectGetMidY(self.view.bounds))'代替它,那就应该起作用。 – Antonio

+0

@Antonio,你是对的,错过了 –

1

这里有两种编程成语,你可以使用一个中心内子视图它的超级视图。如果您正在编写自定义视图,则此代码应该放在该视图的layoutSubviews方法中。如果这是视图控制器的一部分,它应该采用其viewDidLayoutSubviews方法。

方法1:设置center

CGFloat x = CGRectGetMidX(superview.bounds); 
CGFloat y = CGRectGetMidY(superview.bounds); 
subview.center = CGPointMake(x, y); 

方法2:设置frame

CGFloat width = (... calculate subview width ...); 
CGFloat height = (... calculate subview height ...); 
CGFloat x = (CGRectGetWidth(superview.bounds) - width)/2.0; 
CGFloat y = (CGRectGetWidth(superview.bounds) - height)/2.0; 
subview.frame = CGRectMake(x, y, width, height); 
相关问题