UIScrollView + UIWebView = НИКАКОЙ scrollsToTop

Это похоже на проблему, которая могла иметь простое решение, но я ничего не нашел, что могло открыть путь к нему. Я использую UIWebView в UIScrollView и касаюсь в строке состояния (для прокрутки содержания к вершине), не работает.

Я сделал простое тестовое приложение, чтобы видеть, является ли это действительно отказ UIWebViews. И это действительно.

//  scrolls to top on status bar tap 
UIScrollView *sv = [[UIScrollView alloc] init];
sv.frame = CGRectMake(0, 0, 320, 480);
sv.contentSize = CGSizeMake(320, 1200);
[self.view addSubview:sv];

// doesn't scroll
UIScrollView *sv = [[UIScrollView alloc] init];
sv.frame = CGRectMake(0, 0, 320, 480);
sv.contentSize = CGSizeMake(320, 1200);

UIWebView *wv = [[UIWebView alloc] init];
wv.frame = CGRectMake(0, 0, 320, 100);
[sv addSubview:wv]; 

[self.view addSubview:sv];

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

Какие-либо идеи?

8
задан sniurkst 1 February 2010 в 07:36
поделиться

1 ответ

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

- (void) ensureScrollsToTop: (UIView*) ensureView {
    ((UIScrollView *)[[webView subviews] objectAtIndex:0]).scrollsToTop = NO;
}

Мне это показалось подозрительным, так как первое подчиненное представление UIWebView утверждает, что это UIScroller. который не является подклассом UIScrollView. Однако, поскольку UIScroller поддерживает свойство scrollsToTop, приведение просто дает нам возможность обойти предупреждение компилятора:

Class List:
    Class = UIScroller
    Class = UIView
    Class = UIResponder
    Class = NSObject
Supported Methods:
    ...
    Method _scrollToTop
    Method setScrollsToTop:
    Method scrollsToTop
    ...
Supported Properties:
    Property scrollsToTop

EDIT: Еще одно небольшое примечание о том, где это на самом деле должно произойти: в обратном вызове webViewDidFinishLoad. Вызов этого строительства UIWebView не достаточно хорошо, потому что в то время UIWebView не создало это взгляды ребенка все же, которые являются те, вызывающими проблемами:

- (void)webViewDidFinishLoad:(UIWebView *) wv {    
    [self ensureScrollsToTop: wv];
}

EDIT # 2:

Теперь, в прошивке 5, как отмечено в iPhone OS: коснитесь строки состояния для прокрутки вверх, не работает после удаления / добавления обратно используйте новый UIWebView @property scrollView, что делает реализацию sureScrollsToTop ненужной для проектов, которые не с использованием целей развертывания ниже iOS 5.0.

7
ответ дан 5 December 2019 в 17:37
поделиться
Другие вопросы по тегам:

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