2016-10-24 2 views
0

Мы хотели бы открыть WebView с определенным местоположением, открытым в представлении. Поэтому мы хотели бы прокрутить до якоря ИЛИ перейти к нему перед его показом.Прокрутите до привязки в webView

Мы попытались выполнить javascript внутри viewWillAppear, но это не сработает. Если мы выполним его в viewDidAppear, у нас есть переход к якорю, который не является допустимым решением.

WebContentView (Простая Раскадровка с UIView содержащим один WebView):

class WebContentViewController: UIViewController, UIWebViewDelegate { 
    @IBOutlet weak var webView: UIWebView! 

    var fileName: String? 
    var screenName: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     webView.backgroundColor = UIColor.white 

     let url = URLRequest(url: Bundle.main.url(forResource: fileName, withExtension: "html")!) 
     webView.loadRequest(url); 
     webView.delegate = self 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     guard let screenName = screenName else { 
      return 
     } 

     webView.stringByEvaluatingJavaScript(from: "window.location.href = '#2-einsatz-von-google-analytics';") 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     //webView.stringByEvaluatingJavaScript(from: "window.location.href = '#2-einsatz-von-google-analytics';") //creates a jump instead of a scrole 
    } 
} 

Пробовали решение и известные вопросы:

Как мы можем выполнить «гладкую» прокрутку до якоря или прыжка, прежде чем он станет видимым?

+0

Это [это] (http://stackoverflow.com/questions/39993770/how-to-get-correct-hight-when-we-have-some-content-on-uiwebview-in-swift-ios/ 39994174 # 39994174) полезен для вашего дела? –

ответ

0

Если вы знакомы с UIScrollView, вам следует знать, что вы можете использовать метод setContentOffset. По умолчанию UIWebView имеет свойство Scrollview:

вар Scrollview: UIScrollView Точка зрения прокрутки, связанные с веб- зрения.

Итак, что вы можете сделать -для ПРИМЕР- является:

webView.scrollView.setContentOffset(CGPoint(x: 0, y: 100), animated: true) 

Также, я думаю, вы должны использовать его после Webview завершения загрузки, вы можете достичь этого путем внедрения UIWebViewDelegate - webViewDidFinishLoad :

func webViewDidFinishLoad(_ webView: UIWebView) { 
    webView.scrollView.setContentOffset(CGPoint(x: 0, y: 100), animated: true) 
} 

Надеюсь, это помогло.

Смежные вопросы