iPhone OS: коснитесь строки состояния, чтобы прокрутить вверх не работает после удаления / добавления обратно - PullRequest
8 голосов
/ 01 сентября 2009

Использование этого метода для скрытия строки состояния:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

При установке значения «скрытый» обратно на «НЕТ» функция «прокрутка вверх» (в UIWebView, UITableView и т. Д.) Больше не работает и требует перезапуска приложения для восстановления функциональности.

Это ошибка (я все-таки подал rdar) или я пропустил шаг? Должен ли я ожидать такого поведения, так как строка состояния как-то «теряет связь» с соответствующим представлением?

Ответы [ 9 ]

18 голосов
/ 01 сентября 2009

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

[currentView setScrollsToTop:YES];

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

10 голосов
/ 01 июля 2011

В iOS 5.0 вы можете получить доступ к свойству scrollview UIWebView

webView.scrollView.scrollsToTop = YES;
7 голосов
/ 22 августа 2010

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

((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;
    }
}
5 голосов
/ 13 июля 2010

У меня была похожая проблема, когда функция прокрутки вверх была потеряна. Оказывается, это будет работать только тогда, когда у вас есть только один активный вид за раз (в том же виде с прокруткой) В моем случае у меня было табличное представление и другое представление, которое исчезло бы / исчезло. Добавление 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 голосов
/ 27 октября 2009

Вы можете использовать следующий код, чтобы UIWebView игнорировать scrollToTop без дополнительных UIScrollView:

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = NO;
3 голосов
/ 16 апреля 2010

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

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

if (![self isKeyWindow]) [self makeKeyWindow];
0 голосов
/ 16 декабря 2016

Я хочу добавить свой случай, я добавляю UIWebView на UIScrollView, как ответил h4xxr вверху:

Если имеется более одного вида прокрутки, сообщение scrollViewDidScrollToTop игнорируется

Итак, я получил простой способ заставить его работать в webView: просто установите для свойства scrolllsToTop scrollView значение false.

А когда коснитесь строки состояния, она не будет перехвачена scrollView, а webView прокрутится до самого верха!

    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.frame = self.view.bounds;
    scrollView.scrollsToTop = false; //igore scrollView`s scrollsToTop
    [self.view addSubview:scrollView];

    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = scrollView.bounds;
    [scrollView addSubview:webView];
0 голосов
/ 19 сентября 2012

При наличии нескольких видов прокрутки вы также можете установить для scrollUpToTop значение NO для других видов прокрутки. сравни:

setScrollsToTop с несколькими классами UIScrollView и / или подклассами (UITableView)

0 голосов
/ 17 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...