2013-05-27 134 views
1

我正在苦苦掙扎着Autolayout(在新應用中首次使用它)。自動佈局問題

以下情況:

  • 故事板
  • iPad的
  • 自動佈局啓用

在一個酥料餅的,我需要重新佈局8個按鍵編程根據用戶選擇。此功能正常工作,直到按鈕必須旋轉180°(可上下顛倒,這是一項應用功能)。

只要我添加旋轉的代碼,重新佈局不再工作。 我不明白爲什麼我可以改變按鈕的位置(如情況2),但是,當旋轉它不工作了。

案例1:

BUTTON 0 |按鈕1 | BUTTON 2 | BUTTON 3
BUTTON 4 | BUTTON 5 |按鈕6 | BUTTON 7

案例2:

按鈕7 |按鈕6 | BUTTON 5 | BUTTON 4
BUTTON 3 | BUTTON 2 |按鈕1 |按鈕1
(所有按鈕旋轉180°,即翻轉顛倒)

一旦AutoLayout關閉,它就像一個魅力。 問題是,只要我關掉AutoLayout,應用程序的其餘部分就完全搞砸了。

如果有人能幫助我理解這個問題,那將會很棒。

的代碼在viewDidAppear

for (UIButton *button in self.allButtons) { 

    if (button.tag == i) { 

     button.transform = CGAffineTransformMakeRotation(M_PI); 

     button.frame = CGRectMake((300 - (100 * currentButtonPosition)) + offsetWidthButton, offsetHeightButton, 100, 100); 
     NSLog(@"Button Tag Nr: %d\nFrame:\nX=%f\nY=%f\nW=%f\nH=%f",button.tag, button.frame.origin.x, button.frame.origin.y, button.frame.size.width, button.frame.size.height); 

        } 

       } 

的幀座標的按鈕都在NSLog的輸出正確。我想不知怎麼的button.transform擰了.frame = CGRectMake部分,但爲什麼我不明白,並期待您的幫助或指導,繼續研究神祕的autoLayout。

希望的解釋是可以理解的:-)

感謝,並有一個愉快的一天 羅尼

+0

如果你不使用'viewDidAppear'中的任何代碼會發生什麼?我不明白你爲什麼需要它。 – trojanfoe

+0

根據用戶在設置中選擇的內容,例如,只有5個按鈕和不同的順序。這就是爲什麼我需要以編程方式對它們進行重新排序。例如,它將是按鈕1 |按鈕3 | BUTTON 5 |按鈕6 | BUTTON 7 –

回答

1

如果您使用自動佈局,你應該改變的約束,而不是設置按鈕的框架。

+0

感謝您的指導。對於我在當前應用程序中需要的東西,我認爲Autolayout是「超越頂部」,我關閉了自動佈局,並在關閉它後關閉了所有出錯的東西。 (很抱歉這麼晚纔回復,沒有互聯網) –

+0

@ MR-應用程序沒有問題,很高興你得到它的工作。 Autolayout開始時有點混亂! –

1

錯誤或意外的行爲在最新的Xcode版本中有所改進,但仍然很混亂。例如,您仍然無法獨立關閉一個XIB上的AutoLayout,而沒有任何後果,儘管其他人的複選框在單獨更改時沒有更改。

你想要做的是以下幾點:

關閉自動佈局之前,根據各方面的意見約束設置幀,刪除應用程序中的所有視圖中的所有約束,然後關閉自動佈局。

這當然不那麼痛苦,你已經在IB中設置了約束條件,而不是以編程方式。

自動佈局是可惜還是好預期的功能的背後,他們尤其缺乏定義和自動設置約束識別固有立場,甚至更糟糕的FAS。這是一個巨大的改進領域。