Запретить прокрутку в UIWebView?

Мне нужно показать веб-статью с 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, но у меня нет никаких доказательств этого. Будет ли отклонено мое приложение с помощью этого решения? Если да, могу ли я использовать второе решение без отклонения?

Ответ 1

Начиная с iOS5, мы имеем прямой доступ к прокрутке UIWebView.
Вы можете отключить прокрутку и отскакивание следующим образом:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

Ответ 2

Поскольку этот вопрос по-прежнему применим, есть новый способ сделать это! (iOS 7.0+, возможно, iOS 6 также не подтвержден)

webView.scrollView.scrollEnabled = NO;

Позаботьтесь:)

Ответ 3

Вы можете просто установить свойство взаимодействия с пользователем веб-представления без i.e.

webView.userInteractionEnabled = NO;

Его довольно просто и отлично работает, спасибо:)

Ответ 4

для всех версий ios вы можете использовать этот код вместо setScrollEnabled:

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

Ответ 5

Используйте этот <body ontouchmove="event.preventDefault()">

Ответ 6

версия SWIFT 3

    webView.scrollView.bounces = false
    webView.scrollView.isScrollEnabled = false

Ответ 7

Я думаю, что Javascript

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

- лучшее решение.

Действительно:

Ваш первый экзамен или

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

один (то же самое) может быть отклонен, потому что он не документирован, или может привести к сбою приложения в дальнейшем обновлении ios.

И

[[myWebView scrollView] setBounces:NO];

не будет работать с iOS < 5.

Ответ 8

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

который отсортировал его для меня

Ответ 9

Первый отклоняется Apple. Это случилось со мной только сегодня утром.

Ответ 10

[[myWebView scrollView] setBounces: NO];

Ответ 11

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

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

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

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

[myWebView setUserInteractionEnabled:NO];

Ответ 12

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

[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];

Ответ 13

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

[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];    

Ответ 14

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

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

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

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

Ответ 15

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

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

Откроется прокрутка на вашей веб-странице.

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

Ответ 16

Мне нужно было отключить прокрутку, потому что отклонение пользовательской клавиатуры действительно перепуталось с прокруткой с помощью 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;
    }
}

Ответ 17

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

Ответ 18

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