Прокрутить родительское представление прокрутки, когда дочернее представление прокрутки достигает конца
У меня есть дочернее представление прокрутки, содержащееся в родительском представлении прокрутки (не прямое дочернее представление). Я хочу, чтобы родительский вид прокрутки начал прокручивать в том же направлении, как только дочерний вид прокрутки достигнет конца своего содержимого.
Этот вид работает из коробки, но не совсем. Прямо сейчас мне нужно поднять палец, чтобы родительский вид прокрутки начал прокручиваться после того, как ребенок достиг конца.
Есть мысли по этому поводу?
РЕДАКТИРОВАТЬ:
Пример того, что я ищу, можно увидеть в Snapchat, проведя пальцем прямо в ячейке табличного представления, чтобы показать контроллер чата.
1 ответ
Не уверен, правильно ли я понимаю, что не значит быть прямым ребенком. Но iOS должна сделать это автоматически для вас, как только вы достигнете конца прокрутки дочернего представления, это позволит вам прокрутить родительскую прокрутку.
Для этого вам необходимо реализовать для ребенка:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)decelerate{
scrollView.bounces = NO;
}
scrollView.bounces = NO
не позволяет scrollView возвращаться к концу прокрутки. Так что он просто придерживается позиции, в которой он прекращает прокручивать.
И тогда вам нужно запустить родительскую прокрутку из scrollViewDidScroll
метод для ребенка.
Что-то похожее:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat scrollViewHeight = scrollView.frame.size.height;
CGFloat scrollContentSizeHeight = scrollView.contentSize.height;
CGFloat scrollOffset = scrollView.contentOffset.y;
CGFloat offset = scrollContentSizeHeight - (scrollOffset + scrollViewHeight);
if (offset <= 0)
[self.parentView setContentOffset:CGPointMake(self.parentView.contentOffset.x, self.parentView.contentOffset.y + diffOffset) animated:YES];
}
куда diffOffset
это расстояние, которое вы хотите прокрутить parentScroll.
Вы можете предпочесть более продвинутый обходной путь.
Например, вы можете реализовать
scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
так что вы знаете, что такое velocity
свитка, сравнивая targetContentOffset
в scrollContentSizeHeight
а также scrollViewHeight
должен дать вам знать, что данный конкретный свиток подходит к концу, перетаскивание достигает конца содержимого просмотра прокрутки.
И вы можете рассчитать diffOffset
а также animationTime
точнее.
Было бы неплохо заблокировать прокрутку для дочернего представления, когда она не полностью видна в родительской прокрутке, поэтому возможность прокрутки появляется только при прокрутке вверх до определенной позиции.