iOS開發備忘筆記 (2)

Hext123發表於2018-06-14
  1. 不能改優先順序為UILayoutPriorityRequired (1000)的約束

  2. heightForRowAtIndexPath沒有被正確測量cell的高度時,cellForRowAtIndexPath可能會被不必要的呼叫,即不可見的cell也會被呼叫。如果正好資料量很大,會導致性呢個嚴重下降。

  3. present出一個背景可透明的viewController

     if (IOS_VERSION >= 8.0) {
         vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
     }else{
         self.modalPresentationStyle = UIModalPresentationOverFullScreen;
     }
     vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
     [self presentViewController:vc animated:YES completion:nil];
    複製程式碼
  4. NSUInteger 無符號整數的-1  是一個很大的數值  在與 NSInteger 做比較時應注意。

    例:

    NSInteger a = 5;
    NSUInteger b = -1;
    複製程式碼

    a<b成立。 

    比較
    輸出
    Arr.count是無符號的(NSUInteger),跟-1 (NSInteger)比較時,會把-1 轉成NSUInteger,然而NSUInteger不儲存負數,-1符號被截斷後溢位變成了一個很大的數

    利用這個特性,以後判斷陣列下標是否越界時,不用寫: if(index >= 0 && index < arr.count) 直接寫這個就好了,一樣的效果: if(index < arr.count)

  5. URL編碼:

    • 編碼URL中的引數部分:

        return [str stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];
      複製程式碼

      各引數的區別:

      輸出區別

    • 編碼整個字串:

        return (__bridge_transfer  NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)str, NULL, (__bridge CFStringRef)@":/?&=;+!@#$()',*", kCFStringEncodingUTF8);
      複製程式碼
  6. cellsectionHeaderView 用, 需要把 cell 放進一個容器裡,否則可能導致 no index path for table cell being reused 的錯誤,以及 sectionHeaderView 在介面上消失.

     -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
     
         UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"head"];
    
         //把 cell 放進一個容器裡再設定為sectionHeaderView
         UIView *view = [[UIView alloc] initWithFrame:[cell frame]];
         cell.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
         [view addSubview:cell];
         return view;
     }
    複製程式碼
  7. 可以利用tableView.backgroundView 來做空列表提示等功能

  8. 給靜態tableViewrightDetail風格的cell上的detailText賦值時, 遇到的一些問題:

    • detailText賦值text@""或者nil之後,此控制元件會消失看不見,再賦值也不會出來.
    • detailText賦值attributedText後, 控制元件大小(寬)沒有跟著變.

    解決辦法: 賦值後重新整理tableViewcell

相關文章