带有嵌入式tableview的Scrollview

Wii*_*ard 14 view subview uiscrollview ios swift

我正在使用Xcode 6在swift中构建一个iOS应用程序.我正在尝试在滚动视图中嵌入一个带有表视图的视图控制器.当用户拖动表视图时,假设移动表,而不是它所嵌入的滚动视图.我已经做了这个插图,以清除我的视图并查看控制器层次结构: 查看Hierachy

红色区域是滚动视图内容大小区域.

绿色和蓝色区域是嵌入在滚动视图中的不同视图控制器.

黄色区域是蓝色视图控制器中的文本字段.

橙色区域是蓝色视图控制器中的表格视图.

我已经在scrollview中启用了分页,因此它可以捕捉到绿色或蓝色视图控制器.如何将表格视图弹出到视图层次结构的顶部,以便滚动滚动视图的唯一方法是在文本字段中拖动.

import UIKit

class RootViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView!

var greenViewController: GreenViewController!
var blueViewController: BlueViewController!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView = UIScrollView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height))
    scrollView.delegate = self
    scrollView.pagingEnabled = true

    self.greenViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Green View Controller") as! GreenViewController
    self.blueViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Blue View Controller") as! BlueViewController

    greenViewController.view.frame = CGRectMake(0, 0, view.bounds.width, view.bounds.height)
    blueViewController = CGRectMake(0, view.bounds.height, view.bounds.width, view.bounds.height)


    scrollView.addSubview(greenViewController.view)
    scrollView.addSubview(blueViewController.view)

    scrollView.contentSize = CGSizeMake(view.bounds.width, view.bounds.height*2)

    self.view.addSubview(scrollView)

}
Run Code Online (Sandbox Code Playgroud)

我希望我已经表达了清楚.

编辑:

我滚动时尝试更改滚动视图的大小.我们的想法是改变框架的高度,使其在完全向下滚动时与文本字段的高度相匹配.但它似乎也改变了滚动视图中嵌入的可见部分:

    func scrollViewDidScroll(scrollView: UIScrollView) {

    if self.scrollView.contentOffset.y > textField.View.bounds.height {
        self.scrollView.frame.size.height = view.bounds.height - scrollView.contentOffset.y - textField.View.bounds.height
        println(self.scrollView.frame)
    }
}
Run Code Online (Sandbox Code Playgroud)

DJo*_*son 0

我嘲笑了这一点。我的视图层次结构如下所示

ViewController's UIView
...UIView (to act as a container view for all the scrollable content)
.......UIView (for the top content) - green
.......UIView (for the bottom content) - blue
............UILabel
............UITableView (with scrollable content - more rows than visible)
Run Code Online (Sandbox Code Playgroud)

我连接@IBOutletsUIScrollView(scrollView) 和UIView(containerView) 作为可滚动区域。

我补充道viewDidLoad

scrollView.contentSize = containerView.frame.size
Run Code Online (Sandbox Code Playgroud)

如果我单击 tableView 之外的任何位置(顶部区域、文本区域等...),我就会滚动滚动视图。如果我尝试在表视图中滚动,则 tableView 会滚动(scrollView 不会)。

这就是你想要实现的目标吗?