2018-01-02帮同事定位解决的两个bug

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属性的人会没有注意到。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容