2014-10-03 74 views
1

張貼了大量的代碼,我想確保它不是一個衆所周知的問題(獨立於特定的代碼)之前,因此,我首先在一般解釋我的問題:的UIScrollView:內容首次出現過低

在故事板我創建了一個UIViewController,添加了UIScrollView以及另一個UIView(分層子視圖)。當鍵盤出現時,我需要滾動視圖來將內容向上推,以便文本框保持可見。在運行應用程序時,除了事實之外,一切都可以正常工作,即內容看起來更接近屏幕的底部,而不是我的故事板中定義的內容。只要我點擊文本字段,內容就會滾動(通過調整scrollView.contentInsetscrollView.scrollIndicatorInsets(0.0, 0.0, keyboardSize!.height, 0.0)),其位置與預期相同。當按下返回鍵時,鍵盤消失,內容再次向下滾動(通過調整scrollView.contentInsetscrollView.scrollIndicatorInsets(0.0, 0.0, 0.0, 0.0)),但現在一切都像我想要的那樣,並且像故事板中定義的一樣。

試圖瞭解發生了什麼我還讓打印出控制檯中的一些y點viewDidLoad(),keyboardDidShowkeyBoardDidHide但是當比較這些時,它們都是一樣的。我錯過了什麼?你需要看到我的代碼的一些特定部分?

enter image description here

enter image description here

+1

你有沒有嘗試在viewDidLoad中設置'scrollView.contentInset和scrollView.scrollIndicatorInsets爲(0.0,0.0,0.0,0.0)'? – Putz1103 2014-10-03 16:18:31

+0

是的,我做了,但是初始位置保持不變@ Putz1103 – 2014-10-03 19:50:52

+0

哦,它在把它放到'viewDidAppear()'的時候工作!你認爲,這是一個優雅的解決方案還是解決代碼中丟失的東西的解決方法?它實際影響的是什麼,爲什麼當視圖首先加載時它的設置是不同的? – 2014-10-03 19:56:11

回答

3

它可以設定爲在需要的時候多達

viewDidAppear(animated: Bool) { 
    scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0) 
    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0) 
} 

任何意見關於其他/更好的解決方案,歡迎!

+0

不要忘記打電話'超級'。 – Kamchatka 2014-10-04 09:57:18

+0

@Kamchatka我對編程頗爲陌生:缺少調用super時會發生什麼?它總是需要嗎? – 2014-10-04 16:36:07

+2

如果您在不調用super的情況下重寫某個方法,那麼您將覆蓋父類中定義的行爲。向super添加一個調用可以確保你仍然保持在那裏定義的任何行爲。 – Kamchatka 2014-10-05 10:01:48

0

你能查看:

  • edgesForExtendedLayout包含上緣
  • automaticallyAdjustsScrollViewInsets是在您的視圖控制器 設置?
+0

你能解釋我應該在哪裏設置這些以及具體到底是什麼? 'edgesForExtendedLayout'與哪個佈局相關? 'automaticAdjustScrollViewInsets'是爲了在'viewDidLoad()'中設置的?我不知道這是否可以接受的解決方案,但正如我最初發表的評論中所回答的那樣,另一個解決方法已經解決了這個問題。 – 2014-10-03 19:59:29

0

這一次會更加美好,沒有明顯的「碰撞」的第一個項目上的觀點,但在這樣做之前它向用戶顯示:

-(void)viewDidLayoutSubviews{ 
    [super viewDidLayoutSubviews]; 
    scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0); 
    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0); 
} 
1

我只是有這個問題 - 我搞砸周圍通過上述所有解決方案,終於找到了解決辦法。

對於我來說,我只是翻轉的視圖控制器構造正確的開關:

public ViewController() 
{ 
    AutomaticallyAdjustsScrollViewInsets = false; 
} 

我懷疑的結果將是的loadView(),viewWillAppear中()等類似的...