2012-01-14 52 views
0

我有我建大都在Interface Builder一個小表格:調整大小一個UIView所以UIScrollView的工作

enter image description here

當裏面的文本框的一個用戶觸動,我使屏幕滾動的頂部(請注意,當鍵盤不存在時不需要任何滾動,並且這兩個字段都不隱藏在鍵盤後面)。

enter image description here

我用很少的代碼實現這一目標。我的表單控件都在一個UIScrollView裏面,它在加載時被禁用並且大小爲0x0(默認)。當我檢測到鍵盤的存在時,我啓用它並將其大小調整爲視圖的寬度視圖的高度+鍵盤大小。然後,當鍵盤被移除時(我將其設置回0x0),禁用並調整滾動視圖的大小。

這項工作幾乎完美。有一個例外(迄今爲止):

可滾動區域(或更確切地說,裏面的視圖)太高。因爲沒有鍵盤的表格並不佔用整個屏幕,我發現我可以滾動到我的視圖的底部(一個全屏)+鍵盤高度,當我真正想要的是滾動到視圖的內容 +鍵盤高度。

我以爲我可以簡單地縮短視圖的尺寸,使其僅適用於內容大小,但界面構建器(xcode 4.2)似乎強制它佔據整個屏幕。試圖在代碼中執行它也不起作用,因爲顯然self.view.frame.size不可分配。我怎樣才能達到我要找的東西?具體而言,當鍵盤存在,我想在屏幕的上半部分的滾動區域的大小,使得沒有那麼多「鬆弛」底部:

enter image description here

回答

1

首先,自.view.frame是一個結構,它有兩個結構本身的字段 - 大小和原點。如果你想改變大小或原產地,你已經改變了整個框架

self.view.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y, 
    self.view.frame.size.width, <your desired height>); 

二,什麼基礎都使用它來創建表單?這看起來只是一個UITableVIew。如果是這樣,考慮將UIViewController的類型更改爲UITableViewController,因爲它自動處理鍵盤。

如果這兩個選項都不適合您,請提供處理鍵盤外觀時使用的代碼,以便我們可以考慮更具體的答案。

+0

這些大部分都是UITextFields,只是稍微有些風格。底部的部門是桌面視圖。 – 2012-01-14 22:00:39

+0

@BenPackard我想你也應該嘗試修改scrollView的contentSize屬性。看起來你只是改變了scrollView的框架,但contentSize保持不變,contentSize決定了scrollView的內容將被滾動多少。 – gavrix 2012-01-14 23:22:12

+0

謝謝。所以現在我使用gavrix的答案手動強制視圖在加載時變小,然後當彈出鍵盤時,我將設置內容大小。在這兩個我都提供花車,這不覺得很重複,但工作正常。當我撤銷這些更改時,我遇到了一個小問題 - 視圖'快退'而不是滾動。現在就開始工作。 – 2012-01-14 23:24:43