2013-06-28 10 views
10

Ich erstelle einen View-Controller, der eine Webansicht verwendet, die hinter der Navigationsleiste und der Statusleiste angezeigt wird. Um dies zu tun, setze ich die Eigenschaft webView.scrollView.contentInset auf einen oberen Einsatz von 64.UIWebView contentInset ohne zusätzliche Höhe unten

Dies schrumpft jedoch nicht die Menge an Fläche, die die Webansicht aufnehmen möchte. Wenn also eine Seite weniger als ein Bildschirm ist, werden unten 64 Pixel als Leerraum angezeigt. Die Web-Ansichten sind in einer vertikalen UIPageViewController, so dass dies Paging stört. Gibt es eine Möglichkeit, diesen zusätzlichen Raum loszuwerden?

+0

Möchten Sie, dass der Inhalt der Webansicht hinter der Navigationsleiste und der Statusleiste angezeigt wird? oder die Navigationsleiste mit der Webansicht hinter der Statusleiste scrollen? – Maximilian

+0

Wenn Sie in der Webansicht blättern, möchte ich, dass sie hinter der transparenten Navigationsleiste und der Statusleiste angezeigt wird. (Ich mache das tatsächlich auf iOS 7, also ist es eine der schicken neuen verschwommenen Navigationsleisten, aber die Art und Weise, wie UIWebView gescrollt wird, scheint sich nicht geändert zu haben.) Ich habe das scroll-with-Verhalten vorher implementiert, aber Es ist nicht das, wonach ich in dieser App suche. –

+0

oh. Ich denke, ich weiß, was Sie wollen, es ist nicht contentInset, weil das den Inhalt der Webansicht bewegt. Wenn Sie möchten, dass die Webansicht hinter der Navigationsleiste angezeigt wird, können Sie clipsToBounds auf NO setzen. – Maximilian

Antwort

0

Ich habe eine Art End-Run um dieses Problem gemacht, indem Scrollen auf kurzen Seiten deaktiviert. Im Grunde verwende ich -stringByEvaluatingJavaScriptFromString:, um etwas JavaScript innerhalb der Seite auszuführen, die von document.body heruntergeht und die Position der Unterseite des untersten Elements berechnet. (document.body selbst ist immer mindestens so groß wie das Ansichtsfenster, daher kann ich nicht auf seine Größe schauen.) Dann, zurück in Objective-C-Land, vergleiche ich das mit der Höhe der Webansicht (abzüglich der Einfügung), und wenn es weniger ist, deaktiviere ich das Scrollen. Dies ist keine perfekte Lösung, aber es deckt die schlimmsten Symptome ab.

Wenn jemand eine bessere Lösung als diese finden kann, würde ich gerne davon hören! Wie auch immer, ich kann das Kopfgeld nicht für mich selbst vergeben, also wird es jemand bekommen.

+0

Ehrlich gesagt, denke ich nicht, dass dies als die richtige Antwort markiert werden sollte, wenn man bedenkt, dass es bessere Möglichkeiten gibt, wie die von Chris Truman. Um mit JavaScript die Position des untersten Elements zu überprüfen, ist es nicht gut. – Uzaak

3

Es klingt wie, was Sie brauchen, um die webView.scrollView.contentSize anzupassen und die Höhe um 64 anzupassen. Sie müssen möglicherweise weitere Informationen darüber, wie es hinter der Navigationsleiste und Statusleiste gleitet, um mir zu helfen, dies zu beantworten. Ich würde in diesem Abschnitt des Scroll-Ansicht Programming Guide einen Blick:

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html

+0

Siehe meinen Kommentar zu der Frage für ein bisschen mehr Details über das, was ich mache. Ich nehme an, dass sich die 'contentSize' nur ändern sollte, wenn die Seite weniger als ein Vollbild groß ist, oder? Wie würde ich das feststellen? –

+0

Gut, wenn Ihr WebView geladen wird, wird Ihnen die contentSize wahrscheinlich sagen, wie hoch der Inhalt ist. Es klingt mehr so, als müssten Sie auch contentInset.bottom = 64 setzen. –

1

die clipsToBounds ändern.

Dadurch wird sein Inhalt außerhalb seines Rahmens sichtbar, also setzen Sie seinen Rahmen wie normal, direkt unter der Navigationsleiste. Die Navigationsleiste ist durchsichtig und Sie sehen darunter den Inhalt.

+0

Leider funktioniert das in diesem Fall nicht, weil sie in einem UIPageViewController sind.Die Web-Ansicht in einem Controller läuft über ihre Ränder hinaus und überlappt schließlich die Controller darüber und darunter, was offensichtlich die Gestenerkenner des Seitencontrollers stört. –

+0

Es sollte nicht, es erlaubt keine Berührungen an jenen Stellen, die Sie jetzt sehen können, zeigt es gerade. und ich habe nie Seitencontroller versucht, also weiß ich nicht, ich dachte, das würde funktionieren. – Maximilian

+0

Eine andere Möglichkeit besteht darin, den View-Controller auf das Vollbild-Layout zu setzen ... und von dort aus zu gehen. 'UIViewController' setzt' clipsToBounds = YES' auf eine oder mehrere der von ihm verwalteten Ansichten ... Ich kann mich nicht erinnern, ob die Einstellung 'viewController.wantsFullScreenLayout = YES' dies verrechnet oder nicht. – nielsbot

1

Vergessen Sie nicht, Autolayout für die Webansicht zu deaktivieren!

2

Haben Sie versucht, die Scrollview-Inhaltseinfügungen der Webansicht anzupassen? Beispiel:

webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0,64, 0) 
Verwandte Themen