Вы пытаетесь убедить себя или Вашего босса?;-)
я сказал бы, что Вам нужен тот. Эмуляция такого нового устройства может только пойти не так, как надо. Плюс не забывают осязательных аспектов.
Вы можете попробовать снова установить для свойства ScrollsToTop значение true после его повторного отображения:
[currentView setScrollsToTop:YES];
Если это не работает, вы определенно показываете только одно представление? Если имеется более одного вида с прокруткой, сообщение scrollViewDidScrollToTop игнорируется ...
Я только что столкнулся с аналогичным поведением в приложении, над которым я сейчас работаю. В этом случае, если вы загружаете видео YouTube из UIWebView, прокрутка вверх перестает работать до конца жизненного цикла приложения. Я предполагаю, что это может произойти и после загрузки проигрывателя фильмов, но не подтвердил. Эта функция существует намного дольше и, вероятно, содержит меньше ошибок.
You can use the following code to have the UIWebView
ignore scrollToTop
without the extra UIScrollView
:
((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = NO;
У меня была аналогичная проблема после воспроизведения видео Youtube в моем приложении. scrollsToTop
по-прежнему имел значение YES
, но касание строки состояния не имело никакого эффекта.
Я наконец понял, что окно моего приложения больше не было ключевым окном. После добавления следующей строки в подкласс UIWindow (который у меня уже был по другим причинам) все снова заработало, как должно:
if (![self isKeyWindow]) [self makeKeyWindow];
У меня была аналогичная проблема, когда была потеряна функция прокрутки вверх. Оказывается, это будет работать только тогда, когда у вас есть только одно активное представление одновременно (в пределах одного представления прокрутки). В моем случае у меня был вид таблицы и другой вид, который постепенно исчезал / появлялся. Добавление 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
Следующее исправление от 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;
}
}