众所周知Auto Layout是随着他约束的控件的位置改变而改变
1.在一个UIView里面添加一个UIImageView,然后给UIImageView添加约束
2.修改PopMenu的frame,让其边移动遍缩小 self.frame = CGRectMake(44, 44, 0, 0);
3.这时候会出现UIImageView中的Image也就是小女孩图片会直接变白如图
4.为什么会出现这个问题呢?我们在上面说过Auto Layout是随着他约束的控件的位置改变而改变,在第3步把UIIMageView的相对约束控件也就是说,PopMenu这个View的尺寸设置为self.frame = CGRectMake(44, 44, 0, 0); 只要执行这句代码,UIImageView的尺寸会瞬间变为0
5.那我怎么证明 UIImageView的尺寸会瞬间变为0呢?具体看图
5.1修改PopMneu的尺寸为 self.frame = CGRectMake(44, 44, 50, 50);
5.2运行起来的效果
也就是说白色为他的父控件的颜色其实不是uiImageView变白色的
6.那这个问题怎么解决呢?
//修改父控件的尺寸
self.frame = CGRectMake(44, 44, 0, 0);
//当父控件的尺寸修改了,需要重绘一次,ImageView就不会瞬间变成白色的了
// 应要记住把这句代码放在下面,如果把这句代码放在self.frame = CGRectMake(44, 44, 0, 0);上面是没有意义的,就相当于下面的代码没有写<span style="font-family: Arial, Helvetica, sans-serif;">[self layoutIfNeeded];</span>
7. 以上是一种解决办法,其实还有一种解决办法就是用transform动画效果
//利用transform动画就可以让子控件随着父控件的缩小而缩小,也就是说可以把Layout去掉
// 这里一定要搞一个最小点,缩小比例是0最小,1为他的本身,这里不要搞成0,如果搞成0就会瞬间变没有
self.transform = CGAffineTransformMakeScale(0.01, 0.01);
// 让其移动
self.center = CGPointMake(44, 44);
<span style="color: rgb(69, 69, 69); font-family: 'PingFang SC'; font-size: 14px; font-weight: bold;">//这样就可以把问题解决了</span>
8.但是有的同学想Layout 和transform一起用那就又会出现瞬间变白的效果
// 不去掉Layout就会瞬间变白因为父控件缩小,layout就会瞬间缩小
self.transform = CGAffineTransformMakeScale(0.01, 0.01);
// 让其移动
self.center = CGPointMake(44, 44);
// 那怎么解决呢?
<span style="color:#ff6600;">
// 解决办法
<span style="color: rgb(69, 69, 69); font-family: Arial, Helvetica, sans-serif;">// 先移动 当代码执行到这一行的时候,UIImageView的Layout判断他没有缩小尺寸,只是移动了位置,他就只是更改位置他就会调整自己,其图片尺寸并不会缩小</span>
self.center = CGPointMake(44, 44);
self.transform = CGAffineTransformMakeScale(0.01, 0.01);