bug1:iOS9与iOS11上不会出现,iOS10上必定出现。
bug再现场景:tabBar上中间的一个圆钮,在iOS9与11上必定居中对齐,在iOS10就会偏向右下角!
代码还原:
- (void)layoutSubviews {
self.plusBtn.centerX = self.centerX;
//调整发布按钮的中线点Y值
self.plusBtn.centerY = self.height * 0.5 - 2*LBMagin + 3;
self.plusBtn.size = CGSizeMake(self.plusBtn.currentBackgroundImage.size.width + 6, self.plusBtn.currentBackgroundImage.size.height +6);
}
- (void)setSize:(CGSize)size
{
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
}
- (void)setCenterX:(CGFloat)centerX
{
CGPoint center = self.center;
center.x = centerX;
self.center = center;
}
- (void)setCenterY:(CGFloat)centerY
{
CGPoint center = self.center;
center.y = centerY;
self.center = center;
}
首先,跟踪调试一款iOS10的手机,定住按钮button的frame的变化。
发现:先设置center再设置size就会出现以下的frame变化过程:
frame(0,0,0,0)------->frame(centerX,centerY,0,0)------->frame (centerX,centerY,width,height)
仔细观察,你会发现,center的位置变成了origin的位置!
因为你先设置center,后设置size! 反之就不会这样!不过我还是建议使用frame赋值,直接一步到位!
问题是:为什么iOS10上会出现bug,而iOS9与iOS11上正常呢?
切换手机测试一下:
原因竟然是:在iOS11上layoutSubview的方法会执行两次!!!!而且iOS10上只会执行一次!!!
bug2:UIViewContentModeScaleAspectFill 图片显示属性,设置并不生效
UIViewContentModeScaleAspectFill, // contents scaled to fill with fixed aspect. some portion of content may be clipped.
上面是苹果官方的解释,可是我的图片就是越界显示,根本没有被裁剪,为什么呢?
这个问题很简单,百度一下就好:imgView.clipsToBounds = YES;
这个必须设置为YES,多余部分的裁剪才真正有效!
这是个小细节问题,可能没有使用过ScaleAspectFill属性的人会没有注意到。