我必须在文章下面显示一篇带有UITableView
的网络文章。
我找到的唯一选项是在tableView标题的UIWebView
中显示该文章。
为了做到这一点,我必须获得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禁止第一个解决方案,但我没有任何证据。 使用此解决方案会拒绝我的申请吗?如果是这样,我可以使用第二种解决方案而不被拒绝吗?
答案 0 :(得分:293)
从iOS5开始,我们可以直接访问UIWebView的滚动视图。
你可以像这样禁用滚动和反弹:
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
答案 1 :(得分:25)
由于这个问题仍然适用,有一种新方法可以做到! (iOS 7.0+,也许iOS 6也未确认)
webView.scrollView.scrollEnabled = NO;
小心:)
答案 2 :(得分:20)
您可以简单地将Web视图用户交互属性设置为no ie。
webView.userInteractionEnabled = NO;
非常简单,工作正常,谢谢:)
答案 3 :(得分:12)
对于所有ios版本,您可以使用此代码而不是setScrollEnabled:
for (UIView *view in webview.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *scrollView = (UIScrollView *)view;
scrollView.scrollEnabled = NO;
}
}
答案 4 :(得分:11)
使用此<body ontouchmove="event.preventDefault()">
答案 5 :(得分:8)
SWIFT 3版
sudo bash -c 'cat <<EOT >>/etc/apache2/sites-available/eco.conf
<VirtualHost *:80>
ServerName eco.vagrant
DocumentRoot /var/www/eco/website/public
<Directory var/www/eco/website/public/>
Options FollowSymLinks
AllowOverride All
</Directory>
# Logging
ErrorLog /var/log/apache2/eco-error.log
LogLevel notice
CustomLog /var/log/apache2/eco-access.log combined
</VirtualHost>
EOT
'
答案 6 :(得分:7)
我认为Javascript
<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}
是最好的解决方案。
确实:
您的第一次考试,或
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
一个(同样的事情)可能被拒绝,因为没有记录,或者让你的应用程序在进一步的ios更新中崩溃。
和
[[myWebView scrollView] setBounces:NO];
方法不适用于iOS&lt; 5。
答案 7 :(得分:5)
第一个被Apple拒绝。今天早上发生在我身上。
答案 8 :(得分:5)
[[myWebView scrollView] setBounces:NO];
答案 9 :(得分:5)
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
为我排序
答案 10 :(得分:4)
我不认为Apple会禁止第一个选项。
你可以尝试
[[[Webview subviews] lastObject] setScrollingEnabled:NO];
如果您不想在UIWebView中使用任何链接,您也可以
[myWebView setUserInteractionEnabled:NO];
答案 11 :(得分:4)
使用它:
[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];
答案 12 :(得分:3)
试试这个,
[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];
答案 13 :(得分:3)
在您的HTML(<HEAD>
标记)
<script>
document.ontouchmove = function(event) { event.preventDefault(); }
</script>
它将禁用您网页上的滚动。
(适用于任何网页,不仅适用于UIWebView)
答案 14 :(得分:3)
我在UIWebView
内放置了一些UIScrollView
,除非我在网页视图上禁用用户互动(即使使用[[webview scrollview] setScrollEnabled:NO]
),否则它不会向我滚动。所以我将UIWebView
放在UIView
里面,这对我有用,但我{h}内的UIWebView
内的交互式链接或div不再有用了。
对我有用的唯一方法是将UIWebView
保留在UIScrollView
内,以便HTML互动有效,但UIScrolling
则不然。
然后,我为webview创建了一个自定义委托,以侦听从Webview中包含的HTML调用的window.open("http:/customEvent")
。我还添加了一个JavaScript刷卡检测,它将启动我的自定义事件。
当webview委托收到此消息时,我会将通知传递给控制器,然后控制器动态滚动UIScrollView
。显然,我必须构建一个逻辑来监视和滚动到下一页或上一页。不是最漂亮的解决方案,但它为我工作。
答案 15 :(得分:2)
我需要禁用滚动,因为解雇自定义键盘实际上搞乱了使用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;
}
}
答案 16 :(得分:1)
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
答案 17 :(得分:1)
是UIScrollview上的UIWebview和UITableView,并设置webview的高度(并添加到Scrollview的总ContentSize),就像你想要的那样?