我使用自動佈局與此佈局下面調整大小的UIView與自動佈局:當置於具有固定大小的UIView
與幀self.view(0,80,320,488)
的CollectionView與框架(0,0,320,220)
underView與框架(0220320268)
並試圖實現這應該調整的動畫underView放大其高度,使underView部分覆蓋collectionView自下而上的移動。
自動佈局強制的,因此我已經創建了一個IBOutlet爲underView高度約束我在動畫正在調整的2次的高度約束:
NSLog(@"underView height %.2f", self.underView.frame.size.height);
NSLog(@"offset (%.2f, %.2f)", offset.x, offset.y);
heightConstraint.constant += offset.y;
NSLog(@"heightConstraint %.2f", heightConstraint.constant);
[self.underView setNeedsUpdateConstraints];
[UIView animateWithDuration:ANIMATION_DURATION
delay:ANIMATION_DELAY
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.underView layoutIfNeeded];
NSLog(@"underView height %.2f", heightConstraint.constant);
} completion:nil];
並在控制檯中,我可以看到:
2013-07-30 09:09:37.268 Cal[49611:a0b] underView height 268.00
2013-07-30 09:09:37.268 Cal[49611:a0b] offset (320.00, 144.00)
2013-07-30 09:09:37.269 Cal[49611:a0b] heightConstraint 412.00
2013-07-30 09:09:37.270 Cal[49611:a0b] underView height 412.00
但是調整大小根本不會發生。
這種行爲的唯一原因我能想到的是上面的collectionView的高度約束,但由於我不希望集合重新加載,我無法對此操作。
我想知道如何實現具有擴展OVER集合視圖的underView?我嘗試使用約束優先權,但它沒有工作...
謝謝@Maarten,但實際上這並沒有什麼區別,此外,如果您閱讀了關於答案的註釋,則鏈接人員已經確認,持續更新可以很好地避開動畫,只留下layoutIfNeeded方法在動畫塊中。作爲一個額外的提示,我也嘗試調用[self.view layoutIfNeeded],因爲有人指出是需要重新顯示佈局的超級視圖,但沒有再改變。 –
你有沒有試過在superView上調用'layoutIfNeeded'?我改變了我的答案以反映這一點。 – Maarten
是的,正如我上面所說,self.view是superview。 –