我有一個視圖(非自動佈局)與autoresizingMask=UIViewAutoresizingFlexibleWidth
和translatesAutoresizingMasksIntoConstraints=YES
。是否安全地更改視圖的框架,如果它具有translatesAutoresizingMasksIntoConstraints = YES
它被添加到寬度爲320的超級視圖,所以它也是320寬度。在旋轉到景觀時,它變爲568寬度。我想在旋轉到風景時將寬度限制爲400。我的做法是,當方向的變化,設置視圖的框架400的寬度,如果上海華盈爲> 400
- (void)orientationChanged:(NSNotification*)notification {
if (self.superview) {
float superviewWidth = self.superview.bounds.size.width;
if (superviewWidth > 400.0) {
CGRect oldFrame = self.frame;
self.frame = CGRectMake((superviewWidth - 400.0)/2.0, oldFrame.origin.y, 400.0, oldFrame.size.height);
}
}
}
我的問題是,是不是安全的,如果視圖更改視圖的框架
- 從其自動調整掩碼生成佈局約束?
- 如果視圖被添加到打開了自動佈局的超級視圖?
通常在涉及約束時,調整大小和動畫是通過它們執行的,而不是幀。這也適用於這裏嗎?我擔心任何可能的副作用大小,比如在純自動佈局中動畫框架而不是約束時會發生什麼情況。
它似乎工作。令人困惑的是,它將口罩轉化爲約束,合理的猜測可能是這些約束中的一些是針對框架的。所以改變它的框架會導致純粹的自動佈局會有相同的問題。但看起來情況並非如此。 – illusionfactory 2014-09-14 14:03:54
@illusionfactory我認爲調用'setFrame:'會導致自動調整掩碼生成的約束失效並基於新的幀重新創建。 – 2014-09-14 16:52:56