我需要电影播放器垂直居中。如何以编程方式将电影播放器居中?
moviePlayer.view.frame = CGRect(x: ???, y: self.view.frame.size.height/4, width: 200, height: 200)
我试过self.view.frame.size.width/2
和self.view.center.x
。 我该怎么做?
我需要电影播放器垂直居中。如何以编程方式将电影播放器居中?
moviePlayer.view.frame = CGRect(x: ???, y: self.view.frame.size.height/4, width: 200, height: 200)
我试过self.view.frame.size.width/2
和self.view.center.x
。 我该怎么做?
您可以在设置完框后设置center
属性。
moviePlayer.view.center = self.view.center;
还有一个考虑 - 如果moviePlayer.view
是self.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。如果您的布局很简单,请使用autoresizingMask
和contentMode
。像那样
//after setting moviePlayer.view.frame
moviePlayer.view.autoresizingMask = UIViewAutoresizingNone;
self.view.contentMode = UIViewContentModeCenter;
如果您的内容不够简单,请使用NSLayoutConstraint
s。此外,使用它你可以市中心仅通过一个轴(垂直或水平)
这里有两种编程成语,你可以使用一个中心内子视图它的超级视图。如果您正在编写自定义视图,则此代码应该放在该视图的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);
谢谢你,工作正常,但有一些办法可以居中只在垂直方向? – Steve
'moviePlayer.view.center = self.view.center;''可能不会在这里工作。 'center'属性是视图中心在超级视图坐标系中的位置,由于'self.view'是这种情况下的超级视图,'self.view.center'只有在self.view'左上角在窗口的左上角。如果你用'CGRectMake(CGRectGetMidX(self.view.bounds),CGRectGetMidY(self.view.bounds))'代替它,那就应该起作用。 – Antonio
@Antonio,你是对的,错过了 –