3

我有一個UIViewController其具有如下結構不起作用:的UIScrollView與自動版式預期

查看 - >滾動型 - >查看 - >的東西種種

,我讀了它最好的將「各種各樣的東西」放入scrollview視圖中。一切工作完美,直到我不得不支持iPhone 5並使用AutoLayout。現在scrollviews已經成爲我存在的禍根。

我怎樣才能讓scrollview正常滾動?我嘗試過所有方式的東西,它只是不能正常工作,或者如果它工作,它總是想要滾動到頂部,或者在導航回到屏幕時,內容偏移量是錯誤的。

目前,我有以下進行滾動視圖半工作:

public override void ViewDidLayoutSubviews() 
{ 
    base.ViewDidLayoutSubviews(); 
    View.LayoutIfNeeded(); 
    scrollView.ContentSize = scrollView.Subviews[0].Frame.Size; 
} 

什麼是這樣使用的自動版式的正確方法是什麼?它沒有這麼難!必須有一種方式與IB權利或代碼來得到它...

+0

是由'scrollView.Subviews [0] .Frame.Size'正確的大小(即,大到足以需要滾動來解決)中產生的值? –

+0

是的,內部視圖在IB中的大小完美,可以容納所有的字段。沒有自動佈局的情況下,scrollview的內容大小是在ViewDidLoad方法中設置的,而且事情完美無缺。 – Dylan

回答

1

該功能是不必要的。如果您使用IB,請確保UIScrollView的「Bottom Space to:View」約束等於Default。您可以通過在編輯約束時選中「標準」複選框來完成此操作。

如果您從起始位置滾動離開,導航到另一個頁面並導航回來,UIScrollView仍然會表現異常。您可以通過重置UIScrollView的contentOffset爲(0,0)viewWillAppear中解決這個問題:

public override void ViewWillAppear(bool animated) 
    { 
     base.ViewWillAppear(animated); 
     scrollView.ContentOffset = new PointF(0, 0); 
    } 
+0

由於某些未知原因,將底部空間設置爲查看默認值可以修復絕大多數問題。謝謝大衛。 – Dylan

0

所以,這是你需要做的就是UIScrollView和自動版式很好地協同工作的內容:

  • 創建UIScrollView並附對其父視圖的約束
  • 添加您的子視圖。爲了讓AutoLayout能夠知道contentView的大小,需要從上到下,從左到右的約束。解決這個問題的另一種(更簡單但不太美觀)的方法是在滾動視圖中添加一個UIView並固定其寬度和/或高度。將UIScrollView的實際內容添加到UIView

該系統非常棒,一旦你掌握了它。祝你好運!

0

我認爲你在那裏進行的功能是不必要的,這可能是你錯過了Autolayout系統試圖用你的視圖完成的事情。

經過搜索後,我發現了一些線程。

this,其中接受的解決方案是通過使用viewDidLayoutSubviews改變contentSize 佈局。似乎哈克。

總體而言,here是你與ScrollViews在自動版式做一個很好的一般性描述,他鏈接到the iOS 6 release notes(搜索的UIScrollView),其中蘋果給出瞭如何正確地做ScrollViews幾個例子。我相信你可以用它來處理它。另外,雖然從你的問題來看並不完全清楚,但如果你認爲可能有一些佈局約束被破壞了,你可以在調試器中看到這個輸出 - 很好的大塊語句正好說明了什麼約束不能滿足以及爲什麼,經過一番解密後,可能會指出問題的根源。這可能根本不相關,因爲聽起來你根本就沒有使用系統,但它可能是你沒有的數據。

祝你好運!

0

最好的辦法是在viewDidAppear所以你否定的自動版式的效果設置contentSize。

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [yourScrollView setContentSize:(CGSizeMake(320, 400))]; 
}