iOS小知識點

來源:互聯網
上載者:User

標籤:print   有一個   而不是   額外   comm   效能   關於   sele   edr   

1.子視圖超出frame的部分不顯示  view.clipsToBounds 設定為YES;   UIScrollview的clipsToBounds預設就是YES

 

2.UIImage 有一個屬性叫size 。  當為對象Image賦值一張圖片以後,Image會自動產生一個size。 那麼也就是說你可以用image.size.x 來設定其父視圖的size。即:

UIImageView *imageView = [[UIImageView alloc]initWithImage:@"text.png"]; 

這樣不用給定frame 系統也可以顯示出帶圖片大小的ImageView。

 

3.contentOffset 表示UIScrollView滾動的位置。(其實就是內容視圖左上方與scrollView顯示視圖左上方的間距值)

 

4.UIEdgeInsets    這個屬效能夠在UIScrollView的四周增加額外的捲動區域,一般用來避免scrollView的內容被其他控制項擋住。

 

5.UIView漸層動畫有三種:(UI控制項屬性被修改)、

[UIView animateWithDuration:0.1 animations:^{     //需要動畫的內容       self.imageView.frame = CGRectMake(20, 20, 30, 20);//e.g      }];
[UIView beginAnimations:nil context:nil];   [UIView setAnimationDuration:2.0f];//修改動畫期間      //   需要做動畫的內容     self.imageView.frame = CGRectMake(20, 20, 30, 20);//e.g[UIView commitAnimations];
[UIView transitionWithView:noteView duration:0.6 // 在noteView視圖上設定過渡效果  options:UIViewAnimationOptionTransitionCurlUp  animations:^{      NSString *currentText = noteView.text;      noteView.text = nextText;     self.nextText = currentText; }  completion:^(BOOL finished){}];

 

6.OC文法細節:不允許直接修改OC對象的結構體屬性的成員

 

7.圖片縮放不止可以用手勢,也可以用ScrollView 

順便提一句,viewForZoomingInScrollView不僅僅可以縮放圖片,只要是繼承自UIIView的控制項都可以進行縮放

 

8.NSArray  有一個方法讓所有對象都執行某個方法

[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

後邊的方法可以自訂,也可以用系統的。

當然類似東西都用for - in  了,如果在迴圈中用的是系統的一些操作、方法。不妨試試上邊這個方法。

 

9.從Xib、Storybord載入控制項執行方法順序

- initWithCoder:aCoder   作用是將xib的控制項通過aCoder解析器建立所有子控制項,通過IBOutlet 串連的屬性在這個方法裡邊值是null。走了initWithCoder  就不會走initWithFrame。

- awakeFormNib  是將凍結的nib控制項喚醒,即所有子控制項建立完畢後就會調用這個方法,在這個地方IBOutlet串連的屬性才會真正的有值,所以修改nib控制項的屬性值應該在這個方法或者運行過程之後的方法。

 

10.為什麼 iOS 開發中,控制項一般為 weak 而不是 strong?

 IBOutlet的屬性一般可以設為weak是因為它已經被view引用了,除非view被釋放,否則IBOutlet的屬性也不會被釋放,另外IBOutlet屬性的生命週期和view應該是一致的,所以IBOutlet屬性一般設為weak。

通俗點講:

因為控制項他爹( view.superview )已經揪著它的小辮了( strong reference ),你( viewController )眼瞅著( weak reference )就好了。當然,如果你想在 view 從 superview 裡面 remove 掉之後還繼續持有的話,還是要用 strong 的( 你也揪著它的小辮, 這樣如果他爹鬆手了它也跑不了 )。

 

11、用NSLayoutConstrain給控制項做了約束以後,如何執行一定的UIView動畫呢?

// 高度約束,為了點擊方法可以改變  @property (nonatomic, strong) NSLayoutConstraint    *heightConstraint;
// 高度約束,為了點擊方法可以改變  @property (nonatomic, strong) NSLayoutConstraint    *heightConstraint;//在修改了約束以後,只要執行下邊的代碼,就能做動畫效果   [UIView animateWithDuration:2.0 animations:^{        [添加了約束的View    layoutIfNeeded];   }];

 

12、關於TableView的[- tableView: heightForRowAtIndexPath:]和[ -tableView: cellForRowAtIndexPath:  ]曆史版本調用順序的變遷

 iOS  7及之前: 

先依次調一遍heightForRow方法再依次調一遍cellForRow方法,在調cellForRow方法的時候並不會再調一次對應的heightForRow方法。如果我們實現了:【-tableView: estimatedHeightForRowAtIndexPath:】給了系統估計高度,那麼上述兩個方法的執行順序就會顛倒。並且給定估計高度對於TableView的效能方面也提示不少。

iOS8  :

先依次調heightForRow(如果行數超過螢幕依次調用兩次,如果行數很少,沒有超過螢幕,只依次調用一次),之後每調一次cellForRow的時候又調一次對應的heightForRow方法。

iOS9和iOS10:

heightForRow方法會先調用三次,然後每調用一次cellForRow的時候再調用一次對應的heightForRow。

 

iOS 11 :

先row = 0調用一次 cellForRow,然後一次heightForRow.然後再是row =1 ,依次類推。看列印結果 

 

13、LayoutIfNeeded小理解

這個方法和另一個方法配對的,setNeedLayout和layoutIfNeed,還有一個關聯的方法是layoutSubviews,在我們沒有任何幹預的情況下,一個view的fram或bounds發生變化時,系統會設定一個flag給這個view,當下一個渲染時機到來時系統會重新按新的布局來渲染視圖。setNeedLayout就是我們主動為這個視圖設定一個flag,告訴系統這個視圖再下一個時機到來時要重新渲染,而layoutIfNeed則是告訴系統,如果設定了flag那麼不用等待時機到來了,直接渲染吧。而layoutSubviews這個方法是系統調用的,我們不需要主動調用,我們只需要調用layoutIfNeed就可以了,讓系統判斷是否在當前時機下立即渲染。

另同時附上一個情境舉個例,當想知道tableView reloadData後的contentSize的話可以在reloadData後用這兩個方法,然後就可以直接提取contentSize了。

 

14、UILabel.preferredMaxLayoutWidth屬性

 - 設定label每一行文字的最大寬度

這個屬性建立在autoLayout布局的label中,如果是非零,那麼這個屬性用於多行Label的文字固定寬度

 

15、iOS NSLog去掉時間戳記及其他輸出樣式

加宏定義

#ifdef DEBUG#define NSLog(FORMAT, ...) fprintf(stderr,"%s\n",[[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);#else#define NSLog(...)#endif

 

16、UITableView點擊一下就出現灰色但是立馬消失掉。

點擊那一刻可以指示出點擊了哪一行,灰色停留一秒鐘消失掉。

//1.設定cell點擊時候為灰色cell.selectionStyle = UITableViewCellSelectionStyleGray;  //2.在tableView代理方法didSelectedRow方法這樣寫- (void)tableView:(UITableView *)tableView didSelecteRowAtIndexPath:(NSIndexPath *)indexPath{      [ tableView deselectRowAtIndexPath:indexPath animated:YES];//直接取消選中這一行}

 

iOS小知識點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.