UITableView внутри ScrollView с бесконечной прокруткой - PullRequest
0 голосов
/ 04 июля 2018

У меня есть экран, который состоит из двух элементов (UIView и UITableView). Когда пользователь прокручивает экран, я хочу UIView выйти из экрана (вверху) и UITableView начать прокручивать. Я даю фиксированную высоту для UIView и фиксированную высоту для UITableViewCells '. Кроме того, я устанавливаю нижний и верхний якоря, но UITableView не показывает, если я не задаю конкретную высоту UITableView. Если я приведу конкретную высоту для UITableView, то просто покажу не все ячейки.

Кроме того: Сначала tableView пуст, поскольку его источник данных пуст. Когда пользователь нажимает кнопку внутри UIView, источник данных выполняет и данные таблицы обновляются.

У меня есть несколько постов, но все они говорят, что дают фиксированную высоту для UITableView. Я не знаю, как показать все клетки с фиксированной высотой. Например: Динамическая высота TableView в виде прокрутки

Якоря:

boxView.anchor(self.view.topAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 20, leftConstant: 10, bottomConstant: 0, rightConstant: 10, widthConstant: 0, heightConstant: 240)
sTableView.anchor(self.boxView.bottomAnchor, left: self.view.leftAnchor, bottom: self.scrollView.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 100)

Как я объявляю UITableView:

let sTableView = UITableView()
var dataSource: [SupportedService]?

let scrollView = UIScrollView()

viewDidLoad(){
sTableView.delegate = self
sTableView.dataSource = self
sTableView.register(BaseCell.self, forCellReuseIdentifier:"supportedServicesCell")
sTableView.tableFooterView = UIView()
sTableView.isScrollEnabled = false
self.scrollView.addSubview(sTableView)

self.view.addSubview(scrollView)
}
@objc func buttonTapped(_ sender: UIButton){
//Do Some Network Requests Here (Data is temp)
dataSource = DATA
sTableView.reloadData()
}

Функции TableView:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if let data = dataSource{
        return data.count
    }else{
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "supportedServicesCell", for: indexPath) as! BaseCell
    guard let data = dataSource else { return cell }
    cell.textLabel?.text = data[indexPath.row].title

    return cell
}

Как я хочу это перед прокруткой:

image

После прокрутки:

image

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вам необходимо изменить свой подход к разработке пользовательского интерфейса приложения для таких проектов. Для текущего проекта, который вы создаете UITableview с заголовком, это простой, приятный и лучший подход, чем встраивание UIView и UITableview в UIScrollView.

0 голосов
/ 04 июля 2018

Я видел, как некоторые приложения делают это. Но у них другой подход. Я объясню этот подход, хотя, если это поможет. Вот что они делают.

  • Взаимодействие с пользователем отключено для tableView в начале.
  • Как только пользователь проведет пальцем по экрану вверх. view анимирован, чтобы скрыться, выходя из экрана, а tableView занимает весь экран.
  • Теперь взаимодействие с пользователем снова включено на tableView и оно функционирует как обычный tableView.
  • Как только пользователь пытается прокрутить вниз даже после достижения вершины tableView, view анимируется обратно на место, и parentView возвращается к тому, что было изначально.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...