我需要電影播放器垂直居中。如何以編程方式將電影播放器居中?
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,你是對的,錯過了 –