2014-10-27 106 views
3

我有一個非常簡單的應用程序。它包含一個紅色視圖和一個綠色標籤。還有一個運行動畫的按鈕。我通過改變其寬度約束常量的值來動畫紅色視圖。UILabel不在UIView內部設置動畫,使用自動佈局

[self.view layoutIfNeeded]; 
[UIView animateWithDuration:0.4 animations:^{ 
    self.widthConstraint.constant = width; 
    [self.view layoutIfNeeded]; 
}]; 

紅色視圖按預期動畫,但內部的綠色標籤立即改變其寬度。我玩了不同的動畫標誌,嘗試了幾個來自SO的提示,但沒有啓用它。

請發現the sources here

TIA

回答

7

看來我已經找到了問題的根源。約束不是一個麻煩,UILabel是。

如果您在我的項目中使用簡單的UIView來代替UILabel,它將按預期順利進行動畫處理。這是一個內容動畫UILabel的問題。你可以達到正確的動畫行爲集label.contentMode = UIViewContentModeCenter,但它看起來很醜。

解決此問題的最佳方法 - 不要在動畫過程中更改大小UILabel。嘗試發明一些其他行爲。在我的情況下,我將UILabel的alpha更改爲0和x的位置,使其大於容器視圖的寬度。

請找到UILabel動畫here更多細節。

0

我看了看你的項目。我沒有太多的編輯器設置約束的經驗,但我會強烈建議你在出現問題時嘗試使用代碼。就我個人而言,我會對這個紅色視圖的寬度設置動畫約束,並使用可視化格式在標籤邊距上設置約束條件,如下所示:@"H:|[label]|"並將此約束添加到紅色視圖。這應該可以解決問題。