UIWebViewからグラデーションを削除するにはどうすればよいですか?上または下を上にスクロールすると表示されます。このコード
webView.backgroundColor = [UIColor whiteColor];
グラデーションの色を変更するだけで、削除はしません。これはどのように行うことができますか?
(注: IWebView下側 と同じ質問ではありません)
ああ、そうです、用語は失敗します。私はそれを影とはまったく呼びませんが、c'est lavieです。これが効果を達成するための私のタイプセーフコードです。要約すると、これにより、スクロールビューの画像ビューの子が非表示になります。 (objectAtIndex:0)メソッドほど変更に対して脆弱ではないため、Apple webViewコントロールの子を並べ替えると、正常に機能しますが、グラデーションという事実に依存します。効果は、スクロールビューの親となるイメージビューによって適用されます(実際、Webビューを支えるスクロールビューがあります)。
{
webView.backgroundColor = [UIColor whiteColor];
for (UIView* subView in [webView subviews])
{
if ([subView isKindOfClass:[UIScrollView class]]) {
for (UIView* shadowView in [subView subviews])
{
if ([shadowView isKindOfClass:[UIImageView class]]) {
[shadowView setHidden:YES];
}
}
}
}
}
UIWebViewを透過的にして、スクロールを削除します。
webView.opaque = NO;
webView.backgroundColor = [UIColor clearColor];
for(UIView *view in webView.subviews){
if ([view isKindOfClass:[UIImageView class]]) {
// to transparent
[view removeFromSuperview];
}
if ([view isKindOfClass:[UIScrollView class]]) {
UIScrollView *sView = (UIScrollView *)view;
for (UIView* shadowView in [sView subviews]){
//to remove shadow
if ([shadowView isKindOfClass:[UIImageView class]]) {
[shadowView setHidden:YES];
}
}
}
}
for スクロールインジケーターを非表示
影のことですか? IWebViewシャドウを削除しますか?
私がこれを行う方法を見つけた唯一の方法は:
for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) {
if([aView isKindOfClass:[UIImageView class]]) { aView.hidden = YES; }
}
UIWebViewのサブビューをステップスルーするだけで、画像ビューの場合はビューを削除します。
私はこれをどのAppStoreアプリにも入れていないので、Appleがそれを受け入れるかどうかはわかりません。
編集:ブライアンのリンクは詳細を提供します。
if (UIDevice.currentDevice.systemVersion.intValue < 7)
for (UIImageView *imageView in webView.scrollView.subviews)
if ([imageView isKindOfClass:[UIImageView class]] && imageView.image.size.width == 1)
imageView.hidden = YES;
上記の方法を使用すると、後でスクロールインジケーター/挿入を編集することはできません。これらはUIImageViewとしても表示されるため、最後のオブジェクトを確認する必要があります。
UIView* lastView = [[subView subviews] lastObject];
for (UIView* shadowView in [subView subviews])
{
if(shadowView!=lastView) ... <-this one is a scroll
}
@damithHの答えに基づいて構築しました
@implementation UIWebView (Extensions)
- (void)setBackgroundAndShadowVisible:(BOOL)visible
{
self.opaque = !visible;
self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:visible ? 1.0 : 0.0];
for(UIView *view in [self subviews])
{
if([view isKindOfClass:[UIImageView class]])
{
view.hidden = !visible;
}
if([view isKindOfClass:[UIScrollView class]])
{
UIScrollView *scrollView = (UIScrollView *)view;
for (UIView *shadowView in [scrollView subviews])
{
if ([shadowView isKindOfClass:[UIImageView class]])
{
shadowView.hidden = !visible;
}
}
}
}
}
@end
これを行うには、WebViewのscrollViewの上部と下部に白いサブビューを追加しました。私はWebViewのコンテンツを管理しているので、白で問題ないことはわかっています。任意のコンテンツを読み込んでいる場合、これは機能しません。
// _topCover and _bottomCover are ivar UIViews
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// with cover views 300pt high, I couldn't scroll far enough to see the shadow,
// even in portrait on an iPad, which gives you the longest scroll distance
CGFloat coverage = 300;
_topCover = [[UIView alloc] initWithFrame:CGRectMake(0, -coverage, webView.bounds.size.width, coverage)];
_bottomCover = [[UIView alloc] initWithFrame:CGRectMake(0, webView.scrollView.contentSize.height, webView.bounds.size.width, coverage)];
_topCover.backgroundColor = [UIColor whiteColor];
_bottomCover.backgroundColor = [UIColor whiteColor];
// in case the webView is resized, e.g. by rotating the device
_topCover.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
_bottomCover.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
[webView.scrollView addSubview:_topCover];
[webView.scrollView addSubview:_bottomCover];
}
webView.scrollView.contentSize.height
で正しい高さが得られるように、ページが読み込まれた後に実行します。ページの高さが動的に変化する場合、これがどのように機能するかわかりません。私のページは一度だけ読み込まれます。リロードする場合は、効率を上げるために、_topCover
と_bottomCover
でのalloc
/init
の実行をスキップすることをお勧めします。
更新:ビューが回転するときに上記のautoresizingMask
を使用するだけで十分かどうかはわかりません。回転後にカバーのサイズを変更するには、これをUIViewController
を含むUIWebView
に入れる必要がある場合があります。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGFloat coverage = 300;
_topCover.frame = CGRectMake(0, -coverage, self.webView.bounds.size.width, coverage);
_bottomCover.frame = CGRectMake(0, self.webView.scrollView.contentSize.height, self.webView.bounds.size.width, coverage);
}