記事の下にUITableView
を含むWeb記事を表示する必要があります。
私が見つけた唯一のオプションは、tableViewヘッダーのUIWebView
に記事を表示することでした。
そのためには、webViewコンテンツの高さを取得する必要があり、webViewのスクロールを無効にする必要があります。
スクロールを無効にする2つの解決策を見つけました。
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によって禁止されていると聞きましたが、その証拠はありません。このソリューションを使用すると、私のアプリケーションは拒否されますか?その場合、拒否されることなく2番目のソリューションを使用できますか?
IOS5以降では、UIWebViewのスクロールビューに直接アクセスできます。
次のようにスクロールとバウンスを無効にできます。
webView.scrollView.scrollEnabled = NO;
webView.scrollView.bounces = NO;
この質問はまだ適用可能であるため、新しい方法があります! (iOS 7.0以降、おそらくiOS 6も未確認)
webView.scrollView.scrollEnabled = NO;
気を付けて :)
Webビューのユーザーインタラクションプロパティをnoに設定するだけです。
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];
文書化されていないために1つ(同じもの)が拒否されるか、さらにiOSの更新でアプリがクラッシュする可能性があります。
そしてその
[[myWebView scrollView] setBounces:NO];
メソッドはiOS <5では機能しません。
[[[WebView subviews] lastObject] setScrollingEnabled:NO];
それは私のためにそれをソートしました
[[WebView scrollView] set Bounces:NO];
1つ目はAppleによって拒否されました。それはちょうど今朝私に起こりました。
これを使って :
[[webView scrollView] setBounces:NO];
[[webView scrollView] setScrollingEnabled:NO];
Appleが最初の選択肢を禁じているとは思わない。
試すことができます
[[[Webview subviews] lastObject] setScrollingEnabled:NO];
UIWebViewでリンクを機能させたくない場合は、次のこともできます。
[myWebView setUserInteractionEnabled:NO];
これを試して、
[(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO];
HTMLでこれを試してください(<HEAD>
タグ)
<script>
document.ontouchmove = function(event) { event.preventDefault(); }
</script>
Webページのスクロールが無効になります。
(UIWebViewだけでなく、どのWebページでも動作します)
UIWebView
の中にいくつかのUIScrollView
を配置しましたが、Webビューでのユーザーの操作を無効にしない限り([[webview scrollview] setScrollEnabled:NO]
を使用しても)スクロールしませんでした。 UIWebView
内にUIView
sを配置しましたが、それはうまくいきましたが、UIWebView
内のHTMLのインタラクティブリンクまたはdivはもう機能しませんでした。
私のために働いた唯一のことは、UIWebView
をUIScrollView
内に保持することで、HTMLインタラクションは機能しますが、UIScrolling
は機能しません。
次に、Webビューに含まれるHTMLから呼び出されるwindow.open("http:/customEvent")
をリッスンするWebビューのカスタムデリゲートを作成しました。また、カスタムイベントを起動するJavaScriptスワイプ検出も追加しました。
WebViewデリゲートがこれを受け取ると、通知をコントローラーに渡し、コントローラーはUIScrollView
を動的にスクロールします。明らかに、次のページまたは前のページを監視してスクロールするロジックを作成する必要がありました。最もきれいな解決策ではありませんが、それは私のために働いています。
カスタムキーボードを閉じると、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にあり、WebViewの高さを設定(およびScrollviewのContentSizeの合計に追加)したいですか?
[[[WebView subviews] lastObject] setScrollingEnabled:NO];