2012-10-04 55 views
0

我想創建一個UIView,它既適用於縱向模式也適用於橫向模式,但不知道如何實現這一點。僅供參考 - 我通過代碼佈置所有組件,所以沒有XIB或Storyboard ...這是一項要求。如何爲縱向和橫向佈局創建UIView

我有一個名爲createView的方法,該方法將我創建視圖時調用的所有視圖組件(按鈕,標籤等等)進行佈局。

我不知道是說我的控制器在水平模式下通過addSubview:myNewCustomView添加視圖,那麼在從縱向切換到橫向時,如何更改自定義UIView中組件的佈局?

我是否會在我的自定義UIView中創建一個方法來佈局肖像和另一個佈景?如果我有兩種方法,我必須得到父母顯示模式,橫向或縱向,然後在我的自定義UIView中調用適當的createView方法?

回答

1

您可以在您的CustomView類中重寫layoutSubviews方法。 並在您的ViewController中調用CustomView對象的setNeedsLayout。 保持對方向的變量在CustomView

在CustomView: -

- (void) layoutSubviews(){ 
    // set position and height width of the subviews according to this views params 
} 

在YourViewController: -

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration { 
    [yourCustomViewObj setOrientation:orientation]; 
    [yourCustomViewObj setNeedsLayout]; 
} 
+0

但在layoutSubviews我怎麼知道我是否應該佈局橫向或縱向? L = CGRectMake(35,759,380,72)P = CGRectMake(235,49,60,12) – jdog

+0

在調用setNeedsLayout之前,您可以在CustomView中保留一個變量用於定位並將該變量設置爲「willRotateToInterfaceOrientation」方法 –

+0

我寧願不是從viewController設置視圖佈局模式,而是讓視圖控制器在佈局模式更改時自行完成。試圖通過以下獲取佈局,但它不起作用UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation]) – jdog

相關問題