[英]UITextView Inside UITableViewCell Auto-Layout iOS 6 vs. iOS 7
[英]Auto-Layout Issues: iOS 7 vs iOS8
我正在嘗試創建一個像這樣工作的可折疊工具欄(在iOS 7中運行 - 丑陋的顏色等用於可視化目的):
但是,當我在iOS 8中運行代碼時,會發生以下情況: 我已經建立了一個基於以下內容的約束系統:
centering view
(未示出)使工具欄保持在屏幕中間。 sizing view
以折疊工具欄。 sizing view
錨定在centering view
的右側(通過trailing
約束)。 container view
包含工具欄的實際內容。 它錨定在sizing view
的右側(也通過trailing
約束)。 容器content views
中包含各種content views
container view
。 他們沒有任何限制。 系統應用的默認約束應該是width,height,top,left,這可以確保它們在container view
保持相對位置。
工具欄的折疊如下:
- (IBAction)showLess:(id)sender {
self.widthConstraint.constant = 50; // adjust this number for collapse / expand
[UIView animateWithDuration:0.3 animations:^{
[self.centeringView layoutIfNeeded]; // trigger animation
}];
}
這會調整sizing view
的寬度。
問題: iOS 8似乎表現得好像我已經錨定了內容視圖,但事實並非如此。
我真誠地感激:
更新:這個問題是通過Stack-overflow的答案解決的。 基本上,正確的答案是這樣 ,但在這個答案中很好地總結了。 iOS7和iOS8之間的區別不在於解釋約束的方式,而在於更新命令通過視圖層次結構向下流動的方式。 當我在iOS 7中首先實現該行為時,我注意到如果我在sizing view
的父視圖上調用layoutIfNeeded
(即在centering view
),動畫將只能正常工作。 在iOS 7中,這顯然會自動降低視圖層次結構。 在iOS 8中,情況並非如此。 您必須使用setNeedsLayout
手動使其約束已更改的視圖無效,然后使用layoutIfNeeded
更新布局。 我在更新的代碼中的解決方案如下所示:
- (IBAction)showLess:(id)sender {
self.widthConstraint.constant = 50;
[self.sizingView setNeedsLayout]; // *** THIS LINE IS NECESSARY TO MAKE THINGS WORK IN iOS 8
[UIView animateWithDuration:0.3 animations:^{
[self.sizingView layoutIfNeeded]; // trigger animation
}];
}
我希望這有助於其他同樣堅持這種向前兼容性問題的人。
Stack-overflow的答案解決了這個問題。 基本上,正確的答案是這樣 ,但在這個答案中很好地總結了。 iOS7和iOS8之間的區別不在於解釋約束的方式,而在於更新命令通過視圖層次結構向下流動的方式。 當我在iOS 7中首先實現該行為時,我注意到如果我在sizing view
的父視圖上調用layoutIfNeeded
(即在centering view
),動畫將只能正常工作。 在iOS 7中,這顯然會自動降低視圖層次結構。 在iOS 8中,情況並非如此:您必須使用setNeedsLayout
手動使約束已更改的視圖無效,然后使用layoutIfNeeded
更新布局。 我在更新的代碼中的解決方案如下所示:
- (IBAction)showLess:(id)sender {
self.widthConstraint.constant = 50;
[self.sizingView setNeedsLayout]; // *** THIS LINE IS NECESSARY TO MAKE THINGS WORK IN iOS 8
[UIView animateWithDuration:0.3 animations:^{
[self.sizingView layoutIfNeeded]; // trigger animation
}];
}
我已經更新了問題以包含答案,但是為了回應@unmircea,我也發布了一個單獨的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.