Программная прокрутка UIWebView на iOS - PullRequest
1 голос
/ 03 августа 2010

Как программно прокрутить UIWebView в Objective-C (iOS)?

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

UIView *webDocView = webView.subviews.lastObject;
webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, webDocView.frame.size.height);

Но по какой-то причине это не сработает.

Стоит ли продолжать решение использовать ScrollView ... или есть лучший способ сделать это?

Ответы [ 3 ]

4 голосов
/ 03 августа 2010

UIWebView не имеет никаких свойств, которые определяют его положение в документе, который он отображает. Скорее всего, вам нужно сделать это с помощью Javascript, если вы хотите, чтобы это было анимированное чувство, посмотрите на это. http://www.learningjquery.com/2007/09/animated-scrolling-with-jquery-12

0 голосов
/ 13 ноября 2013

Вот простое решение, которое я протестировал, и оно работает:

Добавьте следующее в viewDidLoad, чтобы добавить scrollView поверх нашего веб-вида:

    self.scrollView = [[UIScrollView alloc] init];
self.scrollView.delegate = self;
[self.webView addSubview:self.scrollView];

Когда страница загружается, мы настраиваем фрейм и размер содержимого scrollView

-(void) webViewDidFinishLoad:(UIWebView *)webView {
self.scrollView.frame = webView.bounds;
self.scrollView.contentSize = webView.scrollView.contentSize;
}

Теперь вы можете изменить смещение веб-представления view.scrollView, установив self.webView.scrollView.contentOffset для любого CGPoint, который вы хотите программно.

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

#pragma mark UIScrollView Delegate
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
self.webView.scrollView.contentOffset = scrollView.contentOffset;
}
0 голосов
/ 02 октября 2010

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

...