Muszę pokazać artykuł internetowy z UITableView
pod artykułem.
Jedyną opcją, jaką znalazłem, było wyświetlenie artykułu w UIWebView
nagłówku tableView.
Aby to zrobić, muszę uzyskać wysokość zawartości webView i wyłączyć przewijanie dla webView.
Znalazłem dwa rozwiązania, aby wyłączyć przewijanie:
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).scrollEnabled=NO;
lub w JavaScript:
<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}
Słyszałem, że pierwsze rozwiązanie jest zabronione przez Apple, ale nie mam na to żadnego dowodu. Czy moja aplikacja zostanie odrzucona przy użyciu tego rozwiązania? Jeśli tak, czy mogę użyć drugiego rozwiązania bez odrzucenia?
webView.scrollView.bounces = NO;
? ponieważ kod w pierwszej linii wyłączył przewijanie.Ponieważ to pytanie jest nadal aktualne, istnieje nowy sposób, aby to zrobić! (iOS 7.0+, być może także iOS 6, niepotwierdzony)
webView.scrollView.scrollEnabled = NO;
Dbać :)
źródło
Możesz po prostu ustawić właściwość interakcji użytkownika widoku sieci Web na brak np
webView.userInteractionEnabled = NO;
To całkiem proste i działa dobrze, dzięki :)
źródło
dla wszystkich wersji ios możesz użyć tego kodu zamiast setScrollEnabled:
for (UIView *view in webview.subviews) { if ([view isKindOfClass:[UIScrollView class]]) { UIScrollView *scrollView = (UIScrollView *)view; scrollView.scrollEnabled = NO; } }
źródło
Użyj tego
<body ontouchmove="event.preventDefault()">
źródło
Wersja SWIFT 3
webView.scrollView.bounces = false webView.scrollView.isScrollEnabled = false
źródło
Myślę, że JavaScript
<script type="text/javascript"> touchMove = function(event) { event.preventDefault(); }
to zdecydowanie najlepsze rozwiązanie.
W rzeczy samej :
Twój pierwszy przykład lub
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
jedna (ta sama rzecz) może zostać odrzucona, ponieważ nie została udokumentowana lub spowodować awarię aplikacji w kolejnej aktualizacji iOS.
I
[[myWebView scrollView] setBounces:NO];
metoda nie będzie działać z iOS <5.
źródło
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
to załatwiło to dla mnie
źródło
Pierwsza została odrzucona przez Apple. Przydarzyło mi się to właśnie dziś rano.
źródło
[[myWebView scrollView] setBounces: NO];
źródło
Nie sądzę, aby pierwsza opcja była zabroniona przez Apple.
Możesz spróbować
[[[Webview subviews] lastObject] setScrollingEnabled:NO];
Jeśli nie chcesz, aby jakiekolwiek linki działały w Twoim UIWebView, możesz również to zrobić
[myWebView setUserInteractionEnabled:NO];
źródło
Użyj tego :
[[webView scrollView] setBounces:NO]; [[webView scrollView] setScrollingEnabled:NO];
źródło
Spróbuj tego,
[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];
źródło
Umieściłem kilka znaków
UIWebView
wewnątrz aUIScrollView
i nie było to dla mnie przewijanie, chyba że wyłączę interakcję użytkownika z podglądami (nawet z[[webview scrollview] setScrollEnabled:NO]
). Więc umieściłemUIWebView
s wewnątrz aUIView
i to działało dla mnie, ale potem interaktywne linki lub elementy div w moim HTML wewnątrzUIWebView
już nie działały.Jedyną rzeczą, która działała dla mnie, jest zachowanie
UIWebView
wewnętrznej strony,UIScrollView
więc interakcje HTML działają, aleUIScrolling
nie.Następnie utworzyłem niestandardowego delegata do nasłuchiwania widoków internetowych,
window.open("http:/customEvent")
który jest wywoływany z kodu HTML zawartego w widoku sieciowym. Dodałem również wykrywanie przesunięcia JavaScript, które uruchomi moje zdarzenie niestandardowe.Kiedy delegat Webview otrzyma to, przekazuję powiadomienie do kontrolera, który następnie dynamicznie przewija mój plik
UIScrollView
. Oczywiście musiałem zbudować logikę do monitorowania i przewijania do następnej lub poprzedniej strony. Nie jest to najładniejsze rozwiązanie, ale działa na mnie.źródło
Spróbuj tego w swoim HTML (
<HEAD>
tag)<script> document.ontouchmove = function(event) { event.preventDefault(); } </script>
Wyłączy przewijanie na twojej stronie internetowej.
(działa na każdej stronie internetowej, nie tylko w UIWebView)
źródło
Musiałem wyłączyć przewijanie, ponieważ odrzucenie niestandardowej klawiatury naprawdę zepsuło przewijanie z webView. Nic innego nie działało i uciekłem się do czegoś takiego:
-(void)viewDidLoad{ [super viewDidLoad]; [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil]; self.webView.scrollView.showsVerticalScrollIndicator = NO; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){ self.contentOffset = CGPointZero; } }
źródło
Czy UIWebview i UITableView w UIScrollview i ustawianie wysokości widoku internetowego (i dodawanie do całkowitego ContentSize widoku Scrollview) jest zgodne z tym, co chcesz?
źródło
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
źródło