如果视图框架具有translatesAutoresizingMasksIntoConstraints = YES,则更改视图的框架是否安全

时间:2014-08-29 15:24:48

标签: objective-c autolayout nslayoutconstraint autoresizingmask

我有autoresizingMask=UIViewAutoresizingFlexibleWidthtranslatesAutoresizingMasksIntoConstraints=YES的观点(非自动布局)。

它被添加到宽度为320的superview中,因此它也是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. 如果视图已添加到已启用自动布局的超级视图中?
  3. 通常,当涉及约束时,通过它们执行调整大小和动画,而不是帧。这也适用于此吗?我担心任何可能的大小副作用,比如在纯自动布局中对帧而不是约束进行动画时会发生什么。

1 个答案:

答案 0 :(得分:0)

如果视图配置了基于约束的布局,则不应手动调整帧,因为它将在下一个布局过程中更改。您可以通过在视图上设置最大宽度约束来轻松完成此操作。

如果它没有配置基于约束的布局,那么您当前的解决方案将起作用,尽管视图修改自己的框架是不好的做法(视图的框架应该由其超级视图或其视图控制器修改)。