2016-03-16 3 views
0

Мне нужно скрыть первую ячейку за навигационной панелью при загрузке и ее можно увидеть только при прокрутке вниз по таблице.Скрыть первую ячейку за навигационной панелью

+1

Я бы порекомендовал добавить специальное подзаголовок для вашей цели, что может быть подсмотром UIScrollView, реализовать несколько методов делегата, отвечающих вашим потребностям. – antonio081014

ответ

0

Вы можете скрыть первую ячейку за навигационной панели, установив его contentInset в viewDidLoad способом, как показано ниже:

self.tableView.contentInset = UIEdgeInsets(top: -44, left: 0, bottom: 0, right: 0) 

После этого вы можете использовать scrollViewDidScroll для обнаружения, если пользователь прокрутки tableView и вы можете установить contentInset снова один пользователь прокрутите вниз, как показано на рисунке код:

override func scrollViewDidScroll(scrollView: UIScrollView) { 

    if (self.lastContentOffset > scrollView.contentOffset.y) { 
     if lastContentOffset < -55{ 

      if !tablevieSetTo0 { 
       self.tableView.contentInset = UIEdgeInsets(top: 65, left: 0, bottom: 0, right: 0) 
       tablevieSetTo0 = true 
      } 
     } 
    } 
    self.lastContentOffset = scrollView.contentOffset.y 
} 

И ниже полный код:

import UIKit 

class TableViewController: UITableViewController { 

    let data = ["1", "2", "3", "4", "5"] 
    private var lastContentOffset: CGFloat = 0 
    var tablevieSetTo0 = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.tableView.contentInset = UIEdgeInsets(top: -44, left: 0, bottom: 0, right: 0) 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return data.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

     cell.textLabel?.text = data[indexPath.row] 
     return cell 
    } 

    override func scrollViewDidScroll(scrollView: UIScrollView) { 

     if (self.lastContentOffset > scrollView.contentOffset.y) { 
      if lastContentOffset < -55{ 

       if !tablevieSetTo0 { 
        self.tableView.contentInset = UIEdgeInsets(top: 65, left: 0, bottom: 0, right: 0) 
        tablevieSetTo0 = true 
       } 
      } 
     } 
     self.lastContentOffset = scrollView.contentOffset.y 
    } 
} 

Проект sample для получения дополнительной информации.

Смежные вопросы