2017-01-04 7 views
0

У меня есть представление с изображением и таблицей. Изображение находится в первой половине экрана (портрет) и в виде таблицы во втором тайме. И теперь я хочу переместить табличное изображение по изображению, пока оно не достигнет вершины и не закроет изображение. Затем он должен начать «настоящую прокрутку».iOS - Move TableView перед прокруткой

Но каков наилучший способ сделать это? Могу ли я заменить touchsMove переменной tableView? Я мог бы создать расширение UITableView и переопределить функцию, но тогда у меня нет доступа к представлению моего контроллера для перемещения tableView.

Любой ответ? Благодаря!

ответ

0

ImageView должен находиться за столомView с ограничениями top, leading, trailing to superview и height to superview с коэффициентом 0,5. TableView должен заполнить свой супервизор.

Фокус в том, что вы добавляете tableViewHeader, который невидим и равен половине высоты экрана. Это приводит к тому, что начальный контент tableView выводится с экрана. В построителе интерфейса добавьте UIView в tableView как заголовок и сделайте его прозрачным. Также сделайте фон вашего tableView прозрачным. Возьмите выход в headerView и tableView. В viewDidLayoutSubviews установлен ваш headerView.frame.size.height = tableView.frame.size.height/2.

+0

спасибо! Но как я могу получить только заголовок прозрачным? Я создал новый View, установил альфа-значение 0.0 и фон UIColor.clear. Границы: x: 0, y: 0, ширина: ширина экрана, высота: высота экрана/2. Затем я устанавливаю его с помощью tableView.tableHeaderView = headerView. Я прав? – user6586661

0

Помимо того, что ответил Джош, что вы можете попробовать это:

Что вы можете сделать, это сделать UIImageView «уменьшение высоты s на основе количества прокрутки, пока UIImageView» высота s равен 0, а затем начать прокрутку иначе заставить contentOffSet из UITableView всегда оставаться 0. это, как говорится, вот как это сделать:

Марка перечисление для отслеживания различных состояний UIImageView, как:

enum Layout { 

    case ImageExpanding, 
    case ImageDefaultHeight, 
    case ImageDiminishing, 
    case ImageNotVisible 
} 

В своем раскадровке добавьте верхнее, ведущее и конечное ограничение в супервизор для вашего UIImageView и фиксированное ограничение по высоте позволяет сказать 200 (не беспокойтесь, вы измените это позже). К вашему UITableView добавьте главное, конечное и нижнее ограничение в супервизор и верхнюю часть UIImageView. Теперь перетащите устную розетку для высоты UIImageView в UIViewController.

В вашем viewDidLoad установить heightConstraint быть 1/2 от общей высоты экрана и установить состояние перечислимого первоначально быть ImageDefaultHeight

Теперь в вашем scrollViewDidScroll вы должны проверить направление прокрутки и на основе что при проверке текущего состояния изображения увеличивайте или уменьшайте высоту Конкретизация на основе количества, которое пользователь прокручивает и всегда проверяет:

func scrollViewDidScroll(_ scrollView: UIScrollView) { 

    if(/*up*/){ 
      //just telling you about this if condition as this will ensure that 
      //if your table view is large and if tableview isn't at the top, 
      //the image shouldn't expand 

      if layout == .ImageNotVisible{ 

       if scrollView.contentOffset.y <= 0 { 

        //start expanding once you reach top of tableview 
        layout = .ImageExpanding; 
       } 
      } 

      //keep track of other enum states and update your uiimageview 
      //appropriately after calculating the user scroll amount   
      //until the height reaches your initialDefaultHeight and 
      //then do nothing. You will have to figure out the code 
      //for this on your own 


    }else if(/*down*/){ 

      //make image smaller 
    } 

    //dont let table view scroll until image height is 0 when use is scrolling down 
    if layout != ImageNotVisible{ 

     scrollView.contentOffset = CGPoint(x: 0, y: 0) 
    } 
} 

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

  • Нет связанных вопросов^_^