前言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