1

我有一個視圖(非自動佈局)與autoresizingMask=UIViewAutoresizingFlexibleWidthtranslatesAutoresizingMasksIntoConstraints=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); 
    } 
    } 
} 

我的問題是,是不是安全的,如果視圖更改視圖的框架

  1. 從其自動調整掩碼生成佈局約束?
  2. 如果視圖被添加到打開了自動佈局的超級視圖?

通常在涉及約束時,調整大小和動畫是通過它們執行的,而不是幀。這也適用於這裏嗎?我擔心任何可能的副作用大小,比如在純自動佈局中動畫框架而不是約束時會發生什麼情況。

回答

0

如果視圖是使用基於約束的佈局進行配置的,則不應手動調整幀,因爲它會在下一個佈局階段更改。您可以通過在視圖上設置最大寬度限制來輕鬆完成此任務。

如果未使用基於約束的佈局配置,則當前的解決方案將起作用,但對於視圖修改其自己的幀(視圖的幀應由其超視圖或其視圖控制器進行修改)是一種不好的做法。

+0

它似乎工作。令人困惑的是,它將口罩轉化爲約束,合理的猜測可能是這些約束中的一些是針對框架的。所以改變它的框架會導致純粹的自動佈局會有相同的問題。但看起來情況並非如此。 – illusionfactory 2014-09-14 14:03:54

+0

@illusionfactory我認爲調用'setFrame:'會導致自動調整掩碼生成的約束失效並基於新的幀重新創建。 – 2014-09-14 16:52:56

相關問題