2013-03-08 21 views
0

我有一些自定義的按鈕,我添加到視圖中-viewDidLoad我希望他們的觀點中垂直居中,就像這樣:垂直居中視圖,自動尺寸和iPhone 5的4" 畫面

self.customButton.center = CGPointMake(98.f, self.view.center.y); 

然而,鑑於即使在3.5英寸設備上,我預計它是416(480 - 20(狀態欄高度) - 44(導航欄高度)),高度爲504.0

xib中的視圖使用「視網膜4全屏」,但將其設置爲自由形式不起作用。我當然不希望兩個xib只是爲了解決高度差異。

我知道我可以使用UIScreen,但我更喜歡視圖意識到高度差異。

編輯:奇怪的是,在-viewWillAppear,視圖高度正確設置爲416.0。爲什麼在[super viewDidLoad]超出我之後不能處理。

人們是如何處理這個問題的? Autolayout可能會處理這個,但我需要一個iOS5兼容的方法。可以自動調整處理「居中」不知何故?

+0

在視圖中有一個稱爲垂直中心的佈局約束。你可能想嘗試一下。 – Douglas 2013-03-08 01:45:12

+0

我相信你指的是自動佈局,它是iOS6 + – Morrowless 2013-03-08 01:46:09

+0

對不起,誤讀了最後一句! – Douglas 2013-03-08 02:00:23

回答

8

您在iOS5中沒有Autolayout,但您仍然擁有自動調整屏蔽。如果您在IB中垂直放置視圖,請轉至檢查器並取消選擇自動佈局遮罩中的垂直支柱和彈簧,視圖將在4英寸和3.5英寸的屏幕上保持垂直居中。

或者你可以在你的viewDidLoad方法的代碼中做到這一點。只是中心看你現在的樣子,並設置autoresizingMask這樣的:

self.customButton.autoresizingMask = (UIViewAutoresizingFlexibleBottomMargin | \ 
             UIViewAutoresizingFlexibleTopMargin); 
1

編輯:奇怪的是,在-viewWillAppear,鑑於高度正確設置爲416.0。爲什麼在[super viewDidLoad]超出我之後不能處理。

因爲調整視圖大小並不是加載視圖的一部分! -viewDidLoad會從-view中,可能看起來有點像這樣的方法叫:

-(UIView*)view 
{ 
    if (!_view) 
    { 
    [self loadView]; 
    [self viewDidLoad]; 
    } 
    return _view; 
} 

-(void)loadView 
{ 
    // Some code to load the view from a nib/storyboard... 
} 

的觀點將得到調整與像yourViewController.view.frame = ...一個電話,但是這隻能發生的風景被後(因而後-viewDidLoad被稱爲)。

設置一些自動調整掩碼。這就是他們在那裏。