2015-07-21 131 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); 
相關問題