1. 程式人生 > >UIView子view隨父view同步變化

UIView子view隨父view同步變化

一般情況下,當對父view做動畫時,我們希望得到父view內所有的子檢視跟隨著同步發生變化,

即如下的效果(注:黑色正方形為父view1,白色正方形為view1的子view2):

但是,當我們什麼也沒有做時,它的效果往往卻不是我們想要的樣子,而是下面這樣...

抱歉 圖片太模糊了,不過大概可以看到子檢視label並沒有按我們需要的那樣跟隨父檢視view(即黑色的做放大動畫的那個檢視),一起同步做放大的動畫。

這是因為沒有給子檢視做自動約束

此時,只需在父檢視中允許子檢視自適應

    view1.autoresizesSubviews = YES;

並且在子檢視中新增約束:

    label2.autoresizingMask =
    UIViewAutoresizingFlexibleLeftMargin   |
    UIViewAutoresizingFlexibleWidth        |
    UIViewAutoresizingFlexibleRightMargin  |
    UIViewAutoresizingFlexibleTopMargin    |
    UIViewAutoresizingFlexibleHeight       |
    UIViewAutoresizingFlexibleBottomMargin ;

並且,對子檢視的約束必須寫在

    [view1 addSubview:label2];

這句addSubview:程式碼的後面,否則沒有效果。

另外,在比如像我這裡 父檢視view是從無到有這樣一個放大的動畫效果時,

在做動畫前,應先設定父view的寬高為(0.1,0.1),這樣一個很小的數

而不能直接設成(0,0),否則約束也會失效

最後,整個效果就如下圖所示啦: