iOS7版本差別(不按期更新)

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

相關文章
相關標籤/搜索