Ответ 1
Начиная с iOS5, мы имеем прямой доступ к прокрутке UIWebView.
Вы можете отключить прокрутку и отскакивание следующим образом:
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
Мне нужно показать веб-статью с 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, но у меня нет никаких доказательств этого. Будет ли отклонено мое приложение с помощью этого решения? Если да, могу ли я использовать второе решение без отклонения?
Начиная с iOS5, мы имеем прямой доступ к прокрутке UIWebView.
Вы можете отключить прокрутку и отскакивание следующим образом:
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
Поскольку этот вопрос по-прежнему применим, есть новый способ сделать это! (iOS 7.0+, возможно, iOS 6 также не подтвержден)
webView.scrollView.scrollEnabled = NO;
Позаботьтесь:)
Вы можете просто установить свойство взаимодействия с пользователем веб-представления без i.e.
webView.userInteractionEnabled = NO;
Его довольно просто и отлично работает, спасибо:)
для всех версий ios вы можете использовать этот код вместо setScrollEnabled:
for (UIView *view in webview.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *scrollView = (UIScrollView *)view;
scrollView.scrollEnabled = NO;
}
}
Используйте этот <body ontouchmove="event.preventDefault()">
версия SWIFT 3
webView.scrollView.bounces = false
webView.scrollView.isScrollEnabled = false
Я думаю, что Javascript
<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}
- лучшее решение.
Действительно:
Ваш первый экзамен или
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
один (то же самое) может быть отклонен, потому что он не документирован, или может привести к сбою приложения в дальнейшем обновлении ios.
И
[[myWebView scrollView] setBounces:NO];
не будет работать с iOS < 5.
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
который отсортировал его для меня
Первый отклоняется Apple. Это случилось со мной только сегодня утром.
[[myWebView scrollView] setBounces: NO];
Я не думаю, что первый вариант запрещен Apple.
Вы можете попробовать
[[[Webview subviews] lastObject] setScrollingEnabled:NO];
Если вы не хотите, чтобы какие-либо ссылки работали в вашем UIWebView, вы также можете сделать
[myWebView setUserInteractionEnabled:NO];
Используйте его:
[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];
Попробуйте это,
[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];
Я разместил UIWebView
внутри UIScrollView
, и он не прокручивался для меня, если я не отключу взаимодействие пользователя с веб-просмотрами (даже с [[webview scrollview] setScrollEnabled:NO]
). Поэтому я разместил UIWebView
внутри UIView
и работал у меня, но затем интерактивные ссылки или div в моем HTML внутри UIWebView
больше не работали.
Единственное, что сработало для меня, - это сохранить UIWebView
внутри UIScrollView
, чтобы взаимодействия с HTML работали, а UIScrolling
- нет.
Затем я создал пользовательский делегат для просмотра веб-страниц для прослушивания window.open("http:/customEvent")
, который вызывается из HTML, содержащегося в веб-просмотре. Я также добавил обнаружение салфетки JavaScript, которая запустит мое пользовательское событие.
Когда делегат webview получает это, я передаю уведомление контроллеру, который затем динамически прокручивает мой UIScrollView
. Очевидно, мне пришлось построить логику для мониторинга и прокрутки до следующей или предыдущей страницы. Не самое приятное решение, но оно работает для меня.
Попробуйте это в своем HTML (тег <HEAD>
)
<script>
document.ontouchmove = function(event) { event.preventDefault(); }
</script>
Откроется прокрутка на вашей веб-странице.
(работает на любой веб-странице, а не только в UIWebView)
Мне нужно было отключить прокрутку, потому что отклонение пользовательской клавиатуры действительно перепуталось с прокруткой с помощью 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;
}
}
Является ли UIWebview и UITableView в UIScrollview и задает высоту веб-представления (и добавляет к Total ContentSize прокрутки) как то, что вы хотите?
[[[WebView subviews] lastObject] setScrollingEnabled:NO];