RFSegmentView在iOS7设备上不显示label的解决方案
2015-11-04 14:59
525 查看
由于项目原因,需要segment的切换效果,发现github上 王若风 同学(https://github.com/wangruofeng/RFSegmentView)做的很不错,便拿来用。
集成好后,在iOS9的模拟器上效果挺满意,谁知到了iOS7的设备上,只显示边框了,就像这样:
顺便放张正常的效果图:
对比分析发现,是label试图没有正常显示导致的。于是进去看代码。。。
==========================================================
1、调试发现:在iOS9上,- (void)layoutSubviews{} 方法会调用两遍。
第一遍调用时,label的width/height都被设成0。而第二遍调用后,width/height才会是期望值。正是因为调用了两遍,label才能正常显示
2、在iOS7上,- (void)layoutSubviews{} 仅仅调用一边。于是,只能看到边框了。。。
修改如下:
//configure bgView
self.bgView.frame = CGRectMake(leftRightMargin, (viewHeight - self.itemHeight?:kItemHeight)/2, viewWidth - 2*kLeftRightMargin, self.itemHeight?:kItemHeight);
/**
* 在初始化label的rect之前,给itemWidth、itemHeight重新赋值,保证iOS7能正常显示
*/
itemWidth = CGRectGetWidth(self.bgView.frame)/count;
itemHeight = CGRectGetHeight(self.bgView.frame);
//configure items
[self.items enumerateObjectsUsingBlock:^(RFSegmentItem * _Nonnull item, NSUInteger idx, BOOL * _Nonnull stop) {
item.frame = CGRectMake(initX, initY, itemWidth, itemHeight);
initX += itemWidth;
}];
后记:
虽然问题解决了,但留下了疑问,iOS9为什么会多调用一遍??
网上说好几种情况会调- (void)layoutSubviews{} ,但这里代码是一样的,只是系统的差异,有哪位大神知道原因呢。
集成好后,在iOS9的模拟器上效果挺满意,谁知到了iOS7的设备上,只显示边框了,就像这样:
顺便放张正常的效果图:
对比分析发现,是label试图没有正常显示导致的。于是进去看代码。。。
==========================================================
1、调试发现:在iOS9上,- (void)layoutSubviews{} 方法会调用两遍。
第一遍调用时,label的width/height都被设成0。而第二遍调用后,width/height才会是期望值。正是因为调用了两遍,label才能正常显示
2、在iOS7上,- (void)layoutSubviews{} 仅仅调用一边。于是,只能看到边框了。。。
修改如下:
//configure bgView
self.bgView.frame = CGRectMake(leftRightMargin, (viewHeight - self.itemHeight?:kItemHeight)/2, viewWidth - 2*kLeftRightMargin, self.itemHeight?:kItemHeight);
/**
* 在初始化label的rect之前,给itemWidth、itemHeight重新赋值,保证iOS7能正常显示
*/
itemWidth = CGRectGetWidth(self.bgView.frame)/count;
itemHeight = CGRectGetHeight(self.bgView.frame);
//configure items
[self.items enumerateObjectsUsingBlock:^(RFSegmentItem * _Nonnull item, NSUInteger idx, BOOL * _Nonnull stop) {
item.frame = CGRectMake(initX, initY, itemWidth, itemHeight);
initX += itemWidth;
}];
后记:
虽然问题解决了,但留下了疑问,iOS9为什么会多调用一遍??
网上说好几种情况会调- (void)layoutSubviews{} ,但这里代码是一样的,只是系统的差异,有哪位大神知道原因呢。
相关文章推荐
- layoutSubviews 详解
- 苹果公司正式发布iOS9 beta3
- 解决适配iOS9
- ios9 HTTP网络请求失败 and 第三方sdk 报错问题解决方法
- UM适配iOS9
- UIView的layoutSubviews和drawRect方法何时调用
- IOS 9 关于微信,QQ三方登陆的https适配结局方案,XCODE配置
- App Transport Security (ATS)
- AddressBookUI Framework in iOS9 beta4
- iOS---iOS9中获取通讯录的方法:Contacts. framework简单使用
- 整理iOS9适配中出现的坑(图文)
- layoutSubviews
- 整理 iOS 9 适配中出现的坑(图文)
- iOS项目更新之升级Xcode7 & iOS9
- layoutsubviews什么时候调用
- 浅谈layoutSubviews
- iOS 适配系列教程
- iOS9 webView打不开了
- iOS 9部分问题
- 【iOS奇葩特性】layoutSubviews在iPhone和iPad中,当设备方向改变后的调用情况