2013-06-28 3 views
10

Sto creando un controller di visualizzazione che utilizza una vista Web che scorre dietro la barra di navigazione e la barra di stato. Per fare questo, sto impostando la proprietà webView.scrollView.contentInset in modo da avere un inserto superiore di 64.UIWebView contentInset senza altezza supplementare in fondo

Tuttavia, ciò non riduce la quantità di area che la visualizzazione Web vuole occupare, quindi se una pagina è inferiore a una schermata, dispone di 64 px di spazio bianco nella parte inferiore per scorrere. Le visualizzazioni Web sono in verticale UIPageViewController, quindi questo interrompe il paging. C'è un modo per sbarazzarsi di questo spazio extra?

+0

Vuoi che il contenuto della visualizzazione Web venga spostato dietro la barra di navigazione e la barra di stato? o la barra di navigazione scorre con la visualizzazione Web dietro la barra di stato? – Maximilian

+0

Quando si scorre la visualizzazione Web, voglio che si sposti dietro la barra di navigazione traslucida e la barra di stato. (In realtà sto facendo questo su iOS 7, quindi è una delle fantastiche nuove barre di navigazione sfocate, ma il modo in cui lo scrolling di UIWebView è fatto non sembra essere cambiato.) Ho implementato il comportamento di scorrimento prima, ma non è quello che sto cercando in questa app. –

+0

oh. Penso di sapere cosa vuoi, non è contentInset perché sposta il contenuto della visualizzazione web. Se vuoi che la vista web venga visualizzata dietro la barra di navigazione e tutto, imposta ClipToBounds su NO – Maximilian

risposta

0

Ho fatto un giro di vite attorno a questo problema disabilitando lo scorrimento su pagine brevi. Fondamentalmente, io uso -stringByEvaluatingJavaScriptFromString: per eseguire alcuni JavaScript all'interno della pagina che scende da document.body e calcola la posizione della parte inferiore dell'elemento in basso. (document.body stesso è sempre grande almeno quanto il viewport, quindi non posso guardare le sue dimensioni.) Quindi, di nuovo in Objective-C-land, lo confronto all'altezza della vista web (meno l'inserto), e se è inferiore, disabilito lo scorrimento. Questa non è una soluzione perfetta, ma copre i peggiori sintomi.

Se qualcuno riesce a trovare una soluzione migliore di questa, mi piacerebbe sentirne parlare! Ad ogni modo, non posso assegnare il premio a me stesso, quindi qualcuno lo otterrà.

+0

In tutta onestà, non penso che questo dovrebbe essere contrassegnato come la risposta corretta, considerando che ci sono opzioni migliori come quella fornita da Chris Truman. Messing con JavaScript per controllare la posizione dell'elemento in basso è male. – Uzaak

3

Suona come se fosse necessario regolare il webView.scrollView.contentSize e regolare l'altezza per 64. Potrebbe essere necessario fornire ulteriori informazioni sul modo in cui scorre dietro la barra di navigazione e la barra di stato per aiutarmi a rispondere a questo. Vorrei dare un'occhiata a questa sezione della guida di scorrimento Vedi programmazione:

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

+0

Vedere il mio commento sulla domanda per ulteriori dettagli su ciò che sto facendo. Suppongo che il 'contentSize' dovrebbe cambiare solo se la pagina è inferiore a un intero schermo, giusto? Come lo determinerei? –

+0

Bene quando la tua WebView si carica, contentSize probabilmente ti dirà quanto è alto il contenuto. Sembra più che sia necessario impostare contentInset.bottom = 64. –

1

Cambiare le clipsToBounds.

webView.clipsToBounds = NO; 

Ciò farà il suo contenuto visibile fuori del suo telaio, in modo da impostare la cornice come normale, proprio sotto la barra di navigazione. La barra di navigazione sarà traslucida e vedrai il suo contenuto sotto di essa.

+0

Sfortunatamente, questo non funziona in questo caso perché sono in un UIPageViewController.La visualizzazione Web in un controller sovrasta i suoi bordi e finisce per sovrapporsi ai controller sopra e sotto, apparentemente interferendo con i riconoscitori di gesti del controllore di pagina. –

+0

Non dovrebbe, non permette i tocchi in quei posti che ora puoi vedere, lo mostra. e Ive non ha mai provato il controller di pagina quindi non lo so, ho pensato che avrebbe funzionato. – Maximilian

+0

Un altro modo potrebbe essere quello di impostare il controller di visualizzazione per il layout a schermo intero ... quindi passare da lì. 'UIViewController' imposta' clipsToBounds = YES' su una o più delle viste che gestisce ... Non ricordo se l'impostazione 'viewController.wantsFullScreenLayout = YES' lo risolve o meno. – nielsbot

1

Non dimenticare di disattivare l'Autolayout per la visualizzazione Web!

2

Avete provato qualcosa come la regolazione degli inserti di contenuto della vista a scorrimento? Esempio:

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