WKWebView - содержание не подходит после увеличения - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с WKWebView при настройке свойства увеличения.

Я ожидаю, что размер контента изменится так же, как в Safari. Но я не могу этого достичь. При установке увеличения на значение меньше 1,0 происходит следующее.

enter image description here

Лишнее пространство не используется, и появляется поле. В Safari уменьшение приводит к уменьшению размера текста и изображения, но фактически используется дополнительное пространство.

enter image description here

Я использую InterfaceBuild с файлами XIB, связывающими вид.

enter image description here

enter image description here

enter image description here

Также я включаю увеличение в viewDidLoad.

webView.allowsMagnification = YES;

Я также безуспешно пробовал следующее:

webView.translatesAutoresizingMaskIntoConstraints = NO;
webView.autoresizesSubviews = NO;
webView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;

Любой намек был бы очень признателен.

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

@ mattsven ответ, кажется, правильный. Вот объективный вариант его решения:

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[[wkWebView evaluateJavaScript:jsCommand completionHandler:^(NSString *result, NSError *error) {
if(error != nil) {
    NSLog(@"Error: %@",error);
    return;
}

NSLog(@" Success");
}];

Кажется, что WKWebView не имеет scalePagesToFit как UIWebViewiOS.

Ссылки. один два

0 голосов
/ 19 марта 2019

Чтобы максимально приблизиться к тому, что делает Cmd +/- в Safari / Chrome, я увеличиваю фрейм WKWebView, а затем преобразую слой в обратную сторону:

    var zoomLevel: CGFloat = 1

    private func didTapZoomOut() {
        zoomLevel -= 0.2
        needsLayout = true
    }

    override func layout() {
        super.layout()
        webView.frame.size = CGSize(width: frame.width * (1/zoomLevel), height: frame.height * (1/zoomLevel))
        webView.layer?.transform = CATransform3DMakeScale(zoomLevel, zoomLevel, 1)
    }

Это также приводит к уменьшению полосы прокрутки, но для моего случая использования это не важно.

0 голосов
/ 13 марта 2019

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

Что вам нужно, так это возможность динамического масштабирования, которую обычно имеет Safari (и другие браузеры)как "масштабирование".Это отличается от magnification, поскольку оно масштабирует макет страницы.Это увеличивает или уменьшает размеры шрифта, размеры элементов и т. Д. Страницы по отдельности.

Нет собственного (открытого) API для масштабирования страницы, как это делает Safari, но вы можете сделать почти то же самоевоспользоваться преимуществом свойства CSS zoom .Вот расширение, которое делает именно это:

extension WKWebView {

    func zoom(to zoomAmount: CGFloat) {
        evaluateJavaScript("document.body.style.zoom = '\(zoomAmount)'", completionHandler: nil)
    }

}

Его можно использовать так:

webView.zoom(to: 0.9)
...