我有一个视图(mainView
),它有4个约束条件,使它将所有4个边缘都粘贴到它的超级视图上。换句话说,我正在制作它,因此它的大小与它正好在它上方的超级视图完全相同。
问题在于,当我这样做时:
CGAffineTransform scaleT = CGAffineTransformMakeScale(0.7f, 0.7f);
self.mainView.transform = scaleT;
为了使它更小,我期望它与约束冲突,但是没有抛出异常。
我期望它与约束冲突的原因是因为现在mainView
小了70%所以它不可能坚持它的超级视图的边缘。
它的作用恰恰在于它以超级视角为中心!
我在这里缺少什么?
谢谢!
答案 0 :(得分:3)
从iOS 8.0开始,自动布局以可预测的方式与变换一起工作。自动布局设置视图的center
和bounds.size
,这些视图会被传递为视图的position
和bounds.size
。自动布局不会查看视图transform
或修改它。在定位视图的自动布局完成后应用转换。
在iOS 8.0之前,自动布局尝试考虑转换,但结果很难理解,通常意味着您不应该尝试组合自动布局和转换。
您可以在“Constraints & transformations: How Auto Layout quietly became transform-friendly in iOS 8” by Vlas Voloshin中找到更多详情。
答案 1 :(得分:0)
尝试在
下粘贴您描述的代码作为:
- (void)viewDidLayoutSubviews
{
CGAffineTransform scaleT = CGAffineTransformMakeScale(0.7f, 0.7f);
self.mainView.transform = scaleT;
}
因为autolayout可以对viewDidLoad的转换属性进行任何更改。