Scrollview со встроенным табличным представлением
Я создаю приложение 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)
}
}
Ответы
Ответ 1
Хорошо, теперь может быть немного поздно, но все же я размещаю это как учебник!
Это менее предпочтительный способ достичь этого. Лучше будет,
Использование контроллера табличного представления в качестве родительского представления, а затем использование ячеек прототипа в качестве статической ячейки (в 'n' числах согласно вашему требованию) в виде карты или для любого другого использования
Каждая используемая ячейка будет рассматриваться как раздел, и никакие прототипные ячейки не будут равны никаким разделам кода, как в фрагменте ниже
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 2 {
return list.count
}
return 1
}
количество строк в случае секций 0 и 1 будет 1 как статическая часть
В то время как количество строк в случае раздела 2 i.e динамическая часть будет равна счету списка.
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell : CustomTableViewCell.swift = CustomTableViewCell.swift()
switch indexPath.section {
case 0:
cell = tableView.dequeueReusableCellWithIdentifier("staticCell1", forIndexPath: indexPath) as! CustomTableViewCell
break
case 1:
cell = tableView.dequeueReusableCellWithIdentifier("staticCell2", forIndexPath: indexPath) as! CustomTableViewCell
break
case 2:
cell = tableView.dequeueReusableCellWithIdentifier("dynamicCell", forIndexPath: indexPath) as! CustomTableViewCell
break
default:
break
}
return cell;
}
и вот оно! Работа сделана! Party!
Я получил ссылку отсюда
Смешивание статических и динамических разделов в виде сгруппированных таблиц?
Ответ 2
Я издевался над этим. Моя иерархия выглядит так:
ViewController 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)
Я подключил @IBOutlets
к UIScrollView
(scrollView) и UIView
(containerView) для прокручиваемой области.
в viewDidLoad
Я добавил:
scrollView.contentSize = containerView.frame.size
Если я щелкнул где-нибудь вне tableView (верхняя область, область текста и т.д.), я прокручиваю scrollView. Если я попытаюсь выполнить прокрутку в представлении таблицы, прокрутки tableView (scrollView не работает).
Это то, чего вы пытались достичь?