2017-05-14 61 views
0

我有一個充當Container View Controller的UIViewController。它有一個與屏幕寬度相同的UIScrollView,但它的高度小於屏幕的高度。如何使子視圖調整爲UIScrollView ContentSize?

UIScrollView包含另外兩個UIViewControllers的視圖,並且可以水平滾動這些視圖。

設置我的contentSize是這樣的:

scrollView.contentSize.width = self.view.bounds.width * 2

這工作,讓我通過我的UIViewController的意見水平滾動。

以下是我如何添加的UIViewController意見,我的滾動視圖:

private func addPanel(viewController: UIViewController, panel: Panel) { 

    let xOffset: CGFloat! 
    switch panel { 
    case .left: 
     xOffset = 0.0 
    case .right: 
     xOffset = self.view.bounds.width 
    } 

    let panelView = UIView(frame: CGRect(x: xOffset, y: 0, width: self.view.bounds.width, height: self.scrollView.bounds.height)) 

    scrollView.addSubview(panelView) 

    let panelViewController: UIViewController! = viewController 

    var viewBounds = view.bounds 
    viewBounds.height = panelView.bounds.height 

    panelViewController.view.frame = view.bounds 
    panelView.addSubview(panelViewController.view) 
    addChildViewController(panelViewController) 
    panelViewController.didMove(toParentViewController: self) 
} 

出於某種原因,UIViewController的視圖不調整大小以適合的UIScrollView的高度。

我應該這樣做基於約束?我將如何做到這一點。我一直在爲此掙扎幾天,而且不知所措。

本質上,UIViewController視圖就像全屏視圖偏移一樣,所以你不能看到視圖的底部,因爲屏幕的底部將它們切斷。

+0

如果您發佈了您正在使用的實際代碼 - 或者至少是一個運行並演示該問題的精簡版本,它會更容易提供幫助。看着你發佈的代碼,當你可能想要將它設置爲'scrollView'或'panelView'的高度時,它看起來像是將'panelViewController.view'的高度設置爲'view'的高度,成爲'panelViewController.view'的超級視圖。 (它也可以幫助使用不那麼容易混淆的名稱,並添加註釋。) – DonMag

回答

0

我只是在不知道所有代碼的情況下進行猜測,但其中一個原因可能是如果您在展開scrollview之前添加子視圖控制器。

添加並設置子視圖大小後,滾動視圖會將其大小調整爲手機大小,但不會更新子視圖。

我的建議是將子視圖控制器添加到滾動視圖,但將框架設置代碼移動到佈局方法中,您知道視圖具有正確的(可見的)框架/邊界。

鑑於你在一個視圖控制器寫這個,一種方法可能是-viewDidLayoutSubviews

希望這是有道理的,隨意問更多的問題,如果它沒有。

相關問題