[英]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並給出約束
仍然給出了約束的錯誤。 所以現在,給scrollview賦予相同的視圖寬度
現在你可以根據需要采取盡可能多的控制,並像我們給其他控件一樣正常地給出約束。
希望你能理解。
享受編碼。
原因是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.