Я использую XWalkView, который является подклассом WKWebView, добавленным в качестве подвида к представлению контейнера программно. Я пытаюсь увеличить страницу содержимого WKWebView, но она не увеличивается в первый раз. WKWebView впоследствии масштабирует страницу содержимого, т. е. когда я масштабирую или делаю двойное масштабирование, он масштабирует сам WKWebView или представление контейнера (мое предположение), а после этого, снова выполняя жесты масштабирования, страница содержимого увеличивается (что ожидаемое поведение).
Вопрос в том, как сделать страницу содержимого WKWebView масштабируемой всякий раз, когда выполняется жест масштабирования.
Я соблюдаю протокол UIScrollViewDelegate
в своем ViewController.h
, как показано ниже:
@interface ViewController : UIViewController<UIScrollViewDelegate, WKNavigationDelegate, WKUIDelegate>
Я устанавливаю делегата на себя в viewDidLoad
, как показано ниже:
xWalkView.scrollView.delegate = self;
Установка масштаба масштабирования в viewDidLoad
, как показано ниже:
xWalkView.scrollView.minimumZoomScale = 1;
xWalkView.scrollView.maximumZoomScale = 6;
& реализация методов протокола в ViewController.m
, как показано ниже:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
}
Я использую BOOL shouldPageNotZoom и устанавливаю его YES или NO на основе URL-адреса в зависимости от того, требуется ли масштабирование или нет. На страницах, где требуется масштабирование, я вижу журнал блока else (NSLog(@"viewForZoomingInScrollView NO");
), который печатается в области журнала, а на страницах, где масштабирование не требуется, я вижу журнал блока if (NSLog(@"viewForZoomingInScrollView YES");
). Который работает. Единственная проблема заключается в том, что страница содержимого не масштабируется при первом жесте масштабирования, вместо этого масштабируется WKWebView или представление контейнера (я думаю), но масштабируется при последующих жестах масштабирования.
После некоторого наблюдения я обнаружил, что подпредставление с индексом 0 в прокрутке масштабируется в первый и последующие разы (но страница содержимого масштабируется в последующие разы, а не в первый раз), что возвращается в viewForZoomingInScrollView
. Что должно быть так и есть. Я сделал это, присвоив значения тега каждому представлению и увидев значение тега, зарегистрировав значение тега в методе scrollViewDidEndZooming
в области журнала, как показано ниже:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
if (shouldPageNotZoom) {
NSLog(@"viewForZoomingInScrollView YES");
return nil;
} else {
NSLog(@"viewForZoomingInScrollView NO");
xWalkView.scrollView.tag = 20;
xWalkView.tag = 15;
xWalkView.scrollView.subviews[0].tag = 10;
_containerView.tag = 5;
return xWalkView.scrollView.subviews[0];
}
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"tag %li", (long) view.tag);
}
Предоставление следующего журнала:
2017-11-28 17:21:36.610753+0530 MyApp[4614:241659] tag 10 //Getting this 1st time of zooming
2017-11-28 17:21:59.369461+0530 MyApp[4614:241659] tag 10 //Getting this at subsequent zooms
Я не знаю, что мне не хватает.
Пожалуйста, прокомментируйте, если необходимы какие-либо разъяснения.