2012-11-06 84 views
0

我試圖以編程方式更改我的UIView的佈局,而不是使用自動佈局,因爲我正在嘗試爲iOS 4及更高版本部署此應用程序。我基本上將屏幕高度設置爲455(iPhone 5)(我知道實際屏幕尺寸爲568點,但底部有一個標籤欄,因此我認爲IB中顯示的尺寸考慮了這一點)。我記錄了所有按鈕和標籤相對於較長屏幕尺寸的原點,並以編程方式將它們更改爲我更喜歡它們的方式。問題是,一些按鈕和標籤現在正在屏幕上出現,所以我認爲我必須執行某種轉換才能將它們限制在範圍內,但我不確定是什麼。見圖片附後:我和initMethod前以編程方式更改iPhone 5的UIView佈局

圖像被稱爲改變按鈕和標籤的起源 圖片我和initMethod之後被調用,以更改原點 查看XCode中的屬性爲舊屏幕尺寸 這是我希望視圖看起來的方式。我移動了按鈕並記錄了每個按鈕的來源。 enter image description here 我的init方法在viewWillAppear中的圖片。注意標籤的框架是如何爲零的。 enter image description here 這裏是我使用的代碼:

-(void)initView 
{ 
    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    if (screenBounds.size.height == 480) { 
     //iphone 4,4s 
     //done 
    }else if(screenBounds.size.height == 568) { 
     //iphone 5 
     CGRect frame; 
     //Static Professor label 
     frame = [staticProfessorLabel frame]; 
     frame.origin.x = 48; 
     frame.origin.y = 218; 
     [staticProfessorLabel setFrame:frame]; 
     //Professor Label 
     frame = [professorLabel frame]; 
     frame.origin.x = 192; 
     frame.origin.y = 218; 
     [professorLabel setFrame:frame]; 
     //show button 
     frame = [showProfessorButton frame]; 
     frame.origin.x = 67; 
     frame.origin.y = 258; 
     [showProfessorButton setFrame:frame]; 
     //clear proff button 
     frame = [clearProfessor frame]; 
     frame.origin.x = 240; 
     frame.origin.y = 258; 
     //note label 
     frame = [bottomNote frame]; 
     frame.origin.x = 160; 
     frame.origin.y = 310; 
     [bottomNote setFrame:frame]; 
     //search button 
     frame = [searchButton frame]; 
     frame.origin.x = 158; 
     frame.origin.y = 424; 
     [searchButton setFrame:frame]; 
     //spinner 
     frame = [actIndicator frame]; 
     frame.origin.x = 266; 
     frame.origin.y = 424; 
     [actIndicator setFrame:frame]; 
    } 
} 

此外,我在viewDidAppear方法調用這個,因爲當我把它在viewDidLoad中,沒有一個按鈕和標籤的給我一個有效的框架(我猜他們還沒有初始化)。

+1

您說過要「以編程方式更改我的UIView的佈局,而不是使用自動佈局」,但屏幕截圖顯示您的故事板已打開自動佈局。如果要手動設置幀,則需要將其關閉。如果您不知道如何禁用故事板中的自動佈局,請參閱[此答案](http://stackoverflow.com/a/13201690/77567)。 –

+0

如果您在下面發表評論,我會將您的答案作爲已接受的答案 – kamran619

回答

2

您的Xcode屏幕截圖顯示您的故事板包含約束條件,因此我們可以告訴您故事版的自動佈局已打開。如果您想直接在代碼中設置視圖框架,則必須關閉自動佈局。如果您需要幫助關閉故事板上的自動佈局,請查看my answer here

1

您的硬編碼座標是錯誤的。只需仔細檢查你的值。

例如,bottomNote始於x 160,這顯然太偏離了右邊。

+0

我已將所有x值註釋掉,因爲無論如何,唯一需要更改的值就是y值。我應該在哪裏調用這個方法,所以只能調用一次。每次我改變視圖並回到這個視圖時,用戶都可以看到視圖正在改變。我無法在viewDidLoad中調用它,因爲子視圖的框架屬性尚未設置 – kamran619

+0

嘗試'viewWillAppear'。所有的觀點都應該已經佈置,但還不可見。 – Mundi

+0

不,如果我在那裏調用initView,那麼對於所有這些框架仍然是0。 – kamran619