前言async
IOS7即将面临淘汰,可是不得不说不少应用还在适配IOS7,下面就是我在项目开发过程当中遇到的一些系统版本的差别,会不按期更新;布局
(一)button的state;spa
在通常状况下,看不出来这个state在不一样版本下有什么差别,由于每一个state都会对应一个属性状态,好比说enabled = yes对应UIControlStateNormal,enabled = no对应UIControlStateDisabled;在倒计时,IOS7设置state会有微妙的不一样(只要enabled设置no,就必须在此state下设置title的变化,不然title不会变化);code
- (void)timerStart:(NSTimer *)theTimer { double deltaTime = [[NSDate date] timeIntervalSinceDate:_startDate]; _second = _totalSecond - (NSInteger)(deltaTime + 0.5) ; if (_second < 0.0) { codeButton.nt_enabled = YES; [codeButton setTitle:@"获取验证码" forState:UIControlStateNormal]; } else { dispatch_async(dispatch_get_main_queue(), ^{ NSString *title = [NSString stringWithFormat:@"%zd秒倒计时",_second]; codeButton.nt_enabled = NO; [codeButton setTitle:title forState:UIControlStateDisabled]; }); } }
备注:其余高版本的系统,尽管是在UIControlStateNormal下,也是能够setTitle成功的。orm
(二)tableview的delegate;开发
(1)IOS7,delegate中的heightForRowAtIndexPath,cellForRowAtIndexPath,先依次执行完heightForRowAtIndexPath,再依次执行cellForRowAtIndexPath且只走一遍这个流程;get
(2)IOS7以上的版本,则是先依次执行heightForRowAtIndexPath(我发现执行了屡次),再执行cellForRowAtIndexPath返回cell后还会执行对应的heightForRowAtIndexPath;string
备注:在使用tableview布局静态界面视图的时候就须要注意,在返回cell以后IOS8以上系统会再次计算cell的高度,因此只要在heightForRowAtIndexPath方法中执行cell中动态计算高度的方法便可;IOS7系统版本就不同,返回cell后不会再次执行heightForRowAtIndexPath,所以在尚未执行cellForRowAtIndexPath返回cell以前就要预先计算好cell的高度,不然在IOS7下cell的高度会是0。it