2013-04-15 103 views
2

我有幾個UITextView的。每個TextView的改變它的尺寸焦點 - 它長約50像素的動畫是這樣的:更改UIView幀時的移動元素

[UITextView animateWithDuration:.1f animations:^{ 
    CGRect new_frame = textView.frame; 
    new_frame.size.height += height; 
    textView.frame = new_frame; 
}]; 

現在我的問題是我需要到一個集中向下50px的移動下TextViews(也與動畫明顯)。我想知道如何做到這一點最簡單的方法。我的應用程序只有iOS6,所以我可以使用自動佈局。我嘗試失敗了。我嘗試使用struts和彈簧 - 也失敗了。

想到的唯一解決方案就是將動畫的每個元素向下移動50 px。但這聽起來很便宜。任何想法如何做到這一點?自動佈局可能嗎?

編輯

這裏是我一直在試圖佈局:

Vertical layout

enter image description here

這裏是如何看起來模擬器點擊第一的TextView後:

enter image description here

因此,你可以看到它,而不是覆蓋的下一個視圖,並沒有保持約束。

+0

自動佈局一定要完成什麼你希望做的。我沒有看過任何實施,只是看我知道這是你想要的視頻。 – atreat

回答

5

不要將幀與自動佈局組合在一起,這會給你不可預知的結果。

將約束從第二個UITextView的頂部移到其超級視圖的頂部。

然後創建UITextView的高度限制的插座。

使用下面的代碼調整UITextView的高度:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    [UITextView animateWithDuration:.1f animations:^{ 
     self.textViewHeightConstraint.constant +=50; 
     [self.view layoutIfNeeded]; 
    }]; 
} 

-(void)textViewDidEndEditing:(UITextView *)textView 
{ 
    [UITextView animateWithDuration:.1f animations:^{ 
     self.textViewHeightConstraint.constant -=50; 
     [self.view layoutIfNeeded]; 
    }]; 
} 
+1

今天我學到了寶貴的教訓。非常感謝你 :) – Gricha

1

這應該可以很容易地與自動佈局,你需要設置一個垂直空間約束每個文本視圖,告訴它在它上面的文本視圖之間留下x像素。

這裏有一個不錯的自動佈局教程,應該有助於解釋一些概念,如果您在有點棘手之前沒有使用過自動佈局。

Beginning Auto Layout in iOS 6

+0

謝謝 - 我用自動佈局嘗試的是在兩個元素之間添加垂直約束。它沒有幫助,我補充了一行:'\t [self.view setTranslatesAutoresizingMaskIntoConstraints:YES]; '我唯一看到的是在調試器中,我得到一個約束列表,並建議刪除一個,因爲它們是衝突的。我會繼續嘗試 – Gricha

+0

你可以截取界面構建器,顯示第二個文本視圖的約束嗎? –

+0

當然 - 我會把它們放在文章編輯 – Gricha

1

聽起來好像對蘋果公司提供表視圖可以解決的問題。

您可以在表格視圖中增加一行的高度,並且以下行將自動下推。這也是非常簡單的動畫。