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

相关问题