簡體   English   中英

ContainerView Inside ScrollView不會在Swift 3中滾動

[英]ContainerView Inside ScrollView don't scroll in Swift 3

我在GitHub上有一個示例項目你可以看到 - > https://github.com/LetSwiftDev/ContainerViewInsideScroll/tree/master

我有兩個,視圖控制器,一個是普通視圖控制器,名為oneViewController第二個是twoViewController里面有UIScrollView ,當我點擊OPEN TWO按鈕轉到ContainerView內的twoViewController但是;

我的twoViewController有不同的高度大小,如1500,內部有scrollview,不滾動到底部? 我沒有看到中間的側面標簽。

我該如何解決? 任何的想法?

我的centerViewController代碼也在下面。 我正在使用centerViewController控制過去的視圖控制器

import UIKit

open class centerViewController: UIViewController {
    fileprivate weak var viewController : UIViewController!
    fileprivate var containerViewObjects = Dictionary<String,UIViewController>()

    open var currentViewController : UIViewController{
        get {
            return self.viewController

        }
    }


    fileprivate var segueIdentifier : String!

    @IBInspectable internal var startUp : String!


    override open func viewDidLoad() {
        super.viewDidLoad()



    }
    open override func viewDidAppear(_ animated: Bool) {
        if let identifier = startUp{
            segueIdentifierReceivedFromParent(identifier)
        }
    }
    override open func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func segueIdentifierReceivedFromParent(_ identifier: String){

        self.segueIdentifier = identifier
        self.performSegue(withIdentifier: self.segueIdentifier, sender: nil)

    }




    override open func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == segueIdentifier{

            if viewController != nil{


                viewController.view.removeFromSuperview()
                viewController = nil

            }
            if ((self.containerViewObjects[self.segueIdentifier] == nil)){
                viewController = segue.destination
                self.containerViewObjects[self.segueIdentifier] = viewController

            }else{
                for (key, value) in self.containerViewObjects{

                    if key == self.segueIdentifier{

                        viewController = value


                    }

                }


            }

            self.addChildViewController(viewController)
            viewController.view.frame = CGRect(x: 0,y: 0, width: self.view.frame.width,height: self.view.frame.height)
            self.view.addSubview(viewController.view)
            viewController.didMove(toParentViewController: self)


        }

    }


}

這是您的演示解決方案。 您可以從這里下載https://www.dropbox.com/s/zvrjd0gp06xe5nw/ContainerViewInsideScroll-master%202.zip?dl=0

問題是你必須學習Scrollview的自動布局。

我只是給出了對scrollview給定約束的提示。

首先采用scrollview並適合屏幕並給出如下約束

圖片

現在在scrollview中查看視圖並適合scrollview並給出約束

圖像2

仍然給出了約束的錯誤。 所以現在,給scrollview賦予相同的視圖寬度

圖像3

現在你可以根據需要采取盡可能多的控制,並像我們給其他控件一樣正常地給出約束。

希望你能理解。
享受編碼。

原因是scrollView太長並且隱藏在屏幕下方,並且沒有正確配置contentSize

在此輸入圖像描述

一個懶惰的解決方案是在出現twoViewController時在代碼中正確設置它們。

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let width = self.scrollView.frame.width
    scrollView.frame = CGRect(origin: scrollView.frame.origin,
                              size: CGSize(width: width, height: CGFloat(500)))
    // Make sure this height is longer than scrollView.
    scrollView.contentSize = CGSize(width: width, height: CGFloat(2000))
  }

正確的解決方案(以及實現scrollview的正確方法)是修復可滾動內容大小模糊(故事板中的自動布局錯誤),就像@Jitendra Modi所提到的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM