2014-12-26 4 views
0

У меня довольно простая сцена с одним UIWebView, который загружает html-документ из пакета. WebView заполняет экран ниже верхнего руководства по расположению и использует рекомендуемые ограничения. Он имеет два нечетных поведения:Почему UIWebView не прокручивается правильно?

  1. Он начинается с содержимого, прокрученного вниз. Вы можете увидеть это на первом изображении ниже. Розовый цвет UIWebView, а сам html - белый.

  2. Есть что-то глупое о UIScrollView webView, потому что (снова: см. Рис.) Содержимое прокручивается до конца, но скроллер не находится в верхней части webView; это наверху содержимого.

Содержание делает легко прокручивать в эту розовую область, и когда содержимое прокручивается весь путь, полоса прокрутки в нижней части UIWebView. См. Второе изображение.

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

Вот HTML (усеченный для пространства):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
<link href="help.css" rel="stylesheet" type="text/css" /> 
</head> 

<body> 
<h2>Frequently-asked questions</h2> 
</body> 
</html> 

И CSS:

@charset "UTF-8"; 
body { 
    font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; 
    font-size: 16px; 
} 

А вот ViewController:

class HelpViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet weak var webView: UIWebView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let navController = self.navigationController 
     navController?.navigationBarHidden = false 
    } 

    override func viewWillAppear(animated: Bool) { 
     loadURL(); 
    } 

    func loadURL() { 
     let htmlName = "support"; 
     let url = NSBundle.mainBundle().URLForResource(htmlName, withExtension: "html") 
     self.webView.delegate = self; 
     if let goodURL = url { 
      let request = NSURLRequest(URL: goodURL) 
      self.webView.loadRequest(request) 
     } 
    } 
} 

Похоже, проблема должно быть связано с чем-то в IB, но я не вижу, что. Любые яркие идеи?

Заранее благодарен!

-Dave

Initial ViewScrolled to bottom

+0

это вопрос макет WebView, пожалуйста, покажите настройку в Interface Builder – JeanLuc

+0

у вас есть WebView внутри Scrollview?если это так, вам это не нужно, потому что веб-просмотр содержит scrollview, и вы получите два scrollview, которые, как мне кажется, не требуются в вашем случае. – JeanLuc

+0

@JeanLuc: У меня нет веб-просмотра внутри прокрутки. –

ответ

0

Так что, я думаю, что я понял это, в некотором смысле. В этой сцене есть панель навигации. У меня было верхнее ограничение webview, установленное в Top Layout Guide, что имеет смысл, потому что именно там я хочу, чтобы вершина реального веб-сайта dang была. Однако, по-видимому, для меня почему-то не кошерно, и поэтому я изменил его, чтобы привязать его к вершине супервизора (основной вид сцены).

Это работает: Я вижу розовый оттенок под полупрозрачной навигационной панелью, но фактическое содержимое веб-сайта находится правильно.

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

-Dave

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