2012-05-22 19 views
1

我知道,如果你要調整一個UIView你必須這樣做,像這樣:什麼是被後面的UIView的框架起源和大小邏輯只讀

CGRect frame = view.frame; 
frame.size.height -= 100; 
view.frame = frame; 

,而不只是:

view.frame.size.height -= 100; 

我的問題是什麼可能是這背後的邏輯? frame的制定者是否做了一些額外的工作,例如可能會撥打setNeedsDisplay

回答

3

基本上它背後的原因,下面一行

view.frame.size.height -= 100; 

實際上並以下兩兩件事:

  1. 呼叫[view frame]方法返回CGRect結構 - 副本什麼是存儲在您查看
  2. 然後它更改副本的height字段 - 因此它不會影響第Ë結構存儲在視圖

是對框架做一些額外的二傳手,如可能叫 setNeedsDisplay?

其實是 - 視圖的frame財產乃根據其來源,範圍和改造,從而設置了框也會影響它的起源和邊界(並根據視圖的contentMode可能迫使視圖重繪)

+5

一這裏的關鍵點在於點符號是不明確的。 'view.frame'表示'[view frame]',而'frame.size.height'引用一個結構體的成員。這兩者是完全不同的,但語法相同,所以某些混淆並不令人驚訝。 –

相關問題