iPhone OS: Коснитесь строка состояния для прокрутки к вершине не работает, после удаляют/добавляют назад

Вы пытаетесь убедить себя или Вашего босса?;-)

я сказал бы, что Вам нужен тот. Эмуляция такого нового устройства может только пойти не так, как надо. Плюс не забывают осязательных аспектов.

8
задан avocade 1 September 2009 в 10:02
поделиться

6 ответов

Вы можете попробовать снова установить для свойства ScrollsToTop значение true после его повторного отображения:

[currentView setScrollsToTop:YES];

Если это не работает, вы определенно показываете только одно представление? Если имеется более одного вида с прокруткой, сообщение scrollViewDidScrollToTop игнорируется ...

18
ответ дан 5 December 2019 в 04:36
поделиться

Я только что столкнулся с аналогичным поведением в приложении, над которым я сейчас работаю. В этом случае, если вы загружаете видео YouTube из UIWebView, прокрутка вверх перестает работать до конца жизненного цикла приложения. Я предполагаю, что это может произойти и после загрузки проигрывателя фильмов, но не подтвердил. Эта функция существует намного дольше и, вероятно, содержит меньше ошибок.

0
ответ дан 5 December 2019 в 04:36
поделиться

You can use the following code to have the UIWebView ignore scrollToTop without the extra UIScrollView:

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = NO;
5
ответ дан 5 December 2019 в 04:36
поделиться

У меня была аналогичная проблема после воспроизведения видео Youtube в моем приложении. scrollsToTop по-прежнему имел значение YES , но касание строки состояния не имело никакого эффекта.

Я наконец понял, что окно моего приложения больше не было ключевым окном. После добавления следующей строки в подкласс UIWindow (который у меня уже был по другим причинам) все снова заработало, как должно:

if (![self isKeyWindow]) [self makeKeyWindow];
3
ответ дан 5 December 2019 в 04:36
поделиться

У меня была аналогичная проблема, когда была потеряна функция прокрутки вверх. Оказывается, это будет работать только тогда, когда у вас есть только одно активное представление одновременно (в пределах одного представления прокрутки). В моем случае у меня был вид таблицы и другой вид, который постепенно исчезал / появлялся. Добавление removeFromSuperview в конце анимации помогло.

Ответ был в комментариях к файлу UIScrollView.h :

/*
 this is for the scroll to top gesture. by default, a single scroll visible scroll view with this flag set will get the call. if there is more than one visible with this
 flag set or the delegeat method returns NO, the view isn't scrolled 
 */
@property(nonatomic) BOOL  scrollsToTop;          // default is YES. if set, special gesture will scroll to top of view after consulting delegate
5
ответ дан 5 December 2019 в 04:36
поделиться

Следующее исправление от Alex сработало для меня. Спасибо!

((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;

Из-за спешки это исправление отлично сработало, однако, если бы у меня было больше времени, я мог бы создать подкласс UIWebView и напрямую получить доступ к защищенному члену UIScrollView.

Меня беспокоит метод Алекса, поскольку он предполагает, что UIScrollView находится в нулевом индексе подпредставлений (инкапсуляция позволяет изменять частные члены). Что предлагает еще одно решение:

for (UIView* v in [webView subviews])
{
    if ([v isKindOfClass:[UIScrollView class]])
    {
        (UIScrollView *)v.scrollsToTop = NO;
    }
}
7
ответ дан 5 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: