我有一个视图(非自动布局)与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