我需要电影播放器垂直居中。
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
。
我该怎么办?
答案 0 :(得分:1)
您可以在设置框架后设置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以获得更好的效果=)
需要考虑的事项
但是,以这种方式设置框架并不是最好的 - 您将被迫手动计算每个视图的位置和大小。如果您的布局是普通的,请使用autoresizingMask
和contentMode
。像那样
//after setting moviePlayer.view.frame
moviePlayer.view.autoresizingMask = UIViewAutoresizingNone;
self.view.contentMode = UIViewContentModeCenter;
如果您的内容不够简单,请使用NSLayoutConstraint
s。此外,使用它您只能以一个轴(垂直或水平)为中心
答案 1 :(得分: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);