Я создаю приложение iOS в swift с Xcode 6. Я пытаюсь встроить контроллер вида с табличным представлением в scrollview. Когда пользователь перетаскивается в представление таблицы, предполагается перемещать таблицу, а не прокрутку, в которую она встроена. Я сделал эту иллюстрацию, чтобы очистить мой взгляд и просмотреть иерархию диспетчера:
Красная область - это область размера содержимого прокрутки.
Зеленые и синие области - это разные контроллеры представлений, встроенные в прокрутку.
Желтая область - это текстовое поле в синем контроллере.
Оранжевая область представляет собой табличный вид в синем контроллере.
Я включил пейджинг в scrollview, чтобы он привязывался к зеленому или синему контроллеру. Как я могу открыть представление таблицы в верхней части иерархии представлений, так что единственный способ прокрутки 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)
}
Надеюсь, что я ясно выразился.
EDIT:
Я попытался изменить размер прокрутки, когда он прокручивается. Идея состояла в том, чтобы изменить высоту кадра, чтобы она соответствовала высоте текстового поля, когда она прокручивается полностью вниз. Но похоже, что он также изменяет видимую часть встроенных в scrollview:
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)
}
}