2011-09-07 125 views
3

我想知道在這個scrollView中使用initWithFrame的真正意義是什麼,因爲我們在此之後還設置了scrollView的尺寸,我們將scrollView作爲視圖的子視圖添加。帶有self.view.frame的initWithFrame:是否有必要?

那麼爲什麼我們需要指定這個initWithFrame呢?我其實並不真正瞭解它時,框架是self.view.frame(我會更好地理解,如果我們設置了不同的矩形,如0,0 50,50)

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; 

scrollView.contentSize = CGSizeMake(847, 1129); 
UIImageView *imageView = [[UIImageView alloc] initWithImage: image]; 
[scrollView addSubview:imageView]; 
[self.view addSubview:scrollView]; 

感謝

+4

你應該調用initWithFrame傳遞'self.view.bounds',而不是'frame'。 – progrmr

+1

事實上,如果self.view.frame有一個非零原點,那麼你的滾動視圖將被偏移相同的數量,可能不是你想要的。填充其父視圖的子應該將其框架設置爲parentView.bounds。 –

+0

@Mike Weller:好的,謝謝,是不是總是這樣,用uiimageView或uiscrollView指定initWithFrame?我有點困惑,因爲我假設「孩子」知道它的父界...編輯:另外,在這種情況下,我們看到非零起源的框架? – Paul

回答

2

self.view在這種情況下是包含滾動視圖的視圖,因此滾動視圖在設置爲self.view.frame時填充整個視圖。框架和內容大小是不同的東西 - 滾動視圖的框架定義滾動視圖的可見部分,內容大小定義滾動視圖內可滾動(可縮放)內容的大小。

+0

謝謝,是的,我瞭解內容,所以如果我們在頂部設置一個工具欄,滾動視圖將通過設置self.view.frame隱藏它? (「填充整個視圖」)我有點困惑self.view.bounds或.frame,以及爲什麼有必要使用它。再次感謝 – Paul

+0

如果工具欄/導航欄/選項卡欄在層次結構中顯示爲較高的控制器,則no,scrollview(或當前視圖中的任何其他子視圖)將不會隱藏它,因爲當前視圖縮小到顯示所有欄後留下的內容。至於邊界和幀 - 如果它說'initWithFrame:' - 在這種情況下使用父視圖的幀,self.view.frame。或者你可以在Interface Builder中直觀地構建界面(我更喜歡非動態界面)。 –

+0

好的非常感謝 – Paul