Отключить прокрутку в UIWebView разрешено? - PullRequest
89 голосов
/ 22 июня 2011

Я должен показать веб-статью с UITableView под статьей.

Единственный вариант, который я нашел, - отобразить статью в UIWebView в заголовке tableView.

Для этого мне нужно получить высоту содержимого webView и отключить прокрутку для webView.

Я нашел два решения для отключения прокрутки:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

или в JavaScript:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

Я слышал, что первое решение запрещено Apple, но у меня нет никаких доказательств этого. Будет ли мое приложение отклонено с помощью этого решения? Если да, могу ли я использовать второе решение без отклонения?

Ответы [ 18 ]

4 голосов
/ 06 августа 2015

Используйте это:

[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];
4 голосов
/ 22 июня 2011

Я не думаю, что первый вариант запрещен Apple.

Вы можете попробовать

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

Если вы не хотите, чтобы в вашем UIWebView работали какие-либо ссылки, вы также можете сделать

[myWebView setUserInteractionEnabled:NO];
3 голосов
/ 04 апреля 2012

Попробуйте это,

[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];    
3 голосов
/ 28 октября 2015

Попробуйте это в своем HTML (<HEAD> tag)

<script> 
  document.ontouchmove = function(event) { event.preventDefault(); }
</script>

Это отключит прокрутку на вашей веб-странице.

(работает на любой веб-странице, не только на UIWebView)

3 голосов
/ 12 апреля 2012

Я поместил несколько UIWebView в UIScrollView, и он не прокручивался для меня, если я не отключил взаимодействие с пользователем в веб-просмотрах (даже с [[webview scrollview] setScrollEnabled:NO]). Поэтому я поместил UIWebView s внутри UIView, и это сработало для меня, но тогда интерактивные ссылки или элементы div в моем HTML внутри UIWebView больше не работали.

Единственное, что сработало для меня, - это сохранить UIWebView внутри UIScrollView, чтобы HTML-взаимодействия работали, а UIScrolling - нет.

Затем я создал пользовательский делегат для веб-просмотров для прослушивания window.open("http:/customEvent"), который вызывается из HTML-кода, содержащегося в веб-просмотре. Я также добавил обнаружение прокрутки JavaScript, которое вызовет мое пользовательское событие.

Когда делегат веб-просмотра получает это, я передаю уведомление контроллеру, который затем динамически прокручивает мой UIScrollView. Очевидно, мне пришлось построить логику для мониторинга и прокрутки до следующей или предыдущей страницы. Не самое красивое решение, но оно работает для меня.

2 голосов
/ 10 ноября 2015

Мне нужно было отключить прокрутку, потому что отказ от пользовательской клавиатуры действительно испортил прокрутку с webView.Больше ничего не получалось, и я прибегнул к чему-то вроде этого:

-(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;
    }
}
1 голос
/ 23 января 2012
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
1 голос
/ 22 июня 2011

Является ли UIWebview и UITableView для UIScrollview и установка высоты веб-просмотра (и добавление к общему ContentSize Scrollview) как то, что вы хотите?

...