CGAffineTransform和NSLayoutConstraint发生冲突

时间:2014-09-26 22:55:02

标签: ios objective-c cocoa-touch uiview

我有一个视图(mainView),它有4个约束条件,使它将所有4个边缘都粘贴到它的超级视图上。换句话说,我正在制作它,因此它的大小与它正好在它上方的超级视图完全相同。

问题在于,当我这样做时:

CGAffineTransform scaleT = CGAffineTransformMakeScale(0.7f, 0.7f);
self.mainView.transform = scaleT;

为了使它更小,我期望它与约束冲突,但是没有抛出异常。

我期望它与约束冲突的原因是因为现在mainView小了70%所以它不可能坚持它的超级视图的边缘。

它的作用恰恰在于它以超级视角为中心!

我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

从iOS 8.0开始,自动布局以可预测的方式与变换一起工作。自动布局设置视图的centerbounds.size,这些视图会被传递为视图的positionbounds.size。自动布局不会查看视图transform或修改它。在定位视图的自动布局完成后应用转换。

在iOS 8.0之前,自动布局尝试考虑转换,但结果很难理解,通常意味着您不应该尝试组合自动布局和转换。

您可以在“Constraints & transformations: How Auto Layout quietly became transform-friendly in iOS 8” by Vlas Voloshin中找到更多详情。

答案 1 :(得分:0)

尝试在

下粘贴您描述的代码
  • (无效)viewDidLayoutSubviews

作为:

 - (void)viewDidLayoutSubviews
{
    CGAffineTransform scaleT = CGAffineTransformMakeScale(0.7f, 0.7f);
    self.mainView.transform = scaleT;
}

因为autolayout可以对viewDidLoad的转换属性进行任何更改。