2014-09-28 92 views
3

幾個小時我一直在試圖弄清楚爲什麼autolayout在iOS8中突破我的約束,而在我應用CGAffineTransformMakeScale時卻沒有在iOS7中實現。 (我使用Xcode 6.0.1(6A317)與Storyboard和Autolayout)。AutoLayout CGAffineTransform iOS7 iOS8

的代碼:

TCTGridController *gridController = self.gridController; 
stackController.view.frame = gridController.view.frame; 
stackController.stackCollectionView.transform = CGAffineTransformMakeScale(0.1, 0.1); 

[gridController.view.superview addSubview:stackController.view]; 

[UIView animateWithDuration:0.2 animations:^{ 
    stackController.stackCollectionView.transform = CGAffineTransformMakeScale(1, 1); 
    [stackController.stackCollectionView layoutIfNeeded]; 
} completion:^(BOOL finished) { 
    [stackController didMoveToParentViewController:self]; 
}]; 

iOS7結果:

enter image description here

iOS8上結果:

enter image description here

iOS8上約束錯誤:

(
"<NSLayoutConstraint:0x7fa126a9b100 V:[_UILayoutGuide:0x7fa126a9a900]-(120)-[TCTCollectionView:0x7fa125139400]>", 
"<_UILayoutSupportConstraint:0x7fa126a8b500 V:[_UILayoutGuide:0x7fa126a9a900(0)]>", 
"<_UILayoutSupportConstraint:0x7fa126a8a960 V:|-(0)-[_UILayoutGuide:0x7fa126a9a900] (Names: '|':UIView:0x7fa126a9a810)>", 
"<NSAutoresizingMaskLayoutConstraint:0x7fa126c86840 h=--- v=--- 'UIView-Encapsulated-Layout-Top' V:[UIView:0x7fa126a9a810]-(0)-|>" 
) 

任何想法?

奧洛克

回答

7

CGAffineTransformIdentity行爲不同的ios7和iOS8上。這與自動佈局和大小類有關。解決方案是刪除與ios7上的動畫衝突的約束。

// solve the constraint-animation problem 
if(NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1) { 
    // iOS7 remove constraints that conflict with animation 
    if (self.centerYAlignment != nil) { 
    self.view.removeConstraint(self.centerYAlignment) //is an IBOutlet 
    } 
} else { 
    // iOS8 constraint animations are fine 
} 
1

問題來自

stackController.view.frame = gridController.view.frame; 
從CGAffineTransformMakeScale

不能及的。因爲我沒有取消選中「調整來自NIB的視圖」。 因此,要解決這個問題我取消選中「調整從NIB視圖」,並添加:

[stackController.view setTranslatesAutoresizingMaskIntoConstraints:YES]; 
2

我有同樣的問題。 CGAffineTransformMakeScale在iOS7上運行良好,但在iOS8上導致了「無法同時滿足約束」錯誤。對我來說,解決方案是在應用轉換之前向子視圖添加de view,並在subview上調用layoutIfNeeded。

前:

subview.transform = CGAffineTransformMakeScale(0.001f, 0.001f); 

後:

[view addSubview:subview]; 
[subview layoutIfNeeded]; 
subview.transform = CGAffineTransformMakeScale(0.001f, 0.001f); 
+0

非常感謝你 - 我生命的浪費小時; d'[子視圖layoutIfNeeded]'做的工作。 – mklb 2015-04-11 22:05:50

相關問題