我希望在用户放大时增加UIWebView
的高度(例如iPhone中的默认邮件应用)。
因此,我尝试使用以下代码在webview中查找scrollview并添加UIScrollViewDelegate
以使用scrollViewDidZoom
来检测缩放比例,以便在此方法上增加webview的高度。
// MessageAppDelegate.h
@interface MessageAppDelegate : NSObject <UIApplicationDelegate,UIWebViewDelegate,UIScrollViewDelegate> {
UIWebView *webview;
UIScrollView *scrollview;
}
//MessageAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[self.window makeKeyAndVisible];
webview = [[UIWebView alloc] initWithFrame:CGRectMake(0, 150, 320, 100)];
webview.delegate = self;
webview.scalesPageToFit = YES;
webview.userInteractionEnabled = YES;
[webview loadHTMLString:@"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=6.0 user-scalable=yes\">test test" baseURL:nil];
[self.window addSubview:webview];
// Find scrollview in webview
for (UIView *view in webview.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
// Get UIScrollView object
scrollview = (UIScrollView *) view;
scrollview.delegate = self;
}
}
return YES;
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
NSLog(@"scale %f",scale);
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidZoom %f",scrollview.zoomScale);
}
问题是我无法在webview上放大/缩小
但NSLog
方法显示scrollViewDisEndZooming
比例1.0
当我结束缩放时
并且scrollViewDidZoom
方法没有显示任何内容。
我想检测webview的缩放比例,以便在scrollViewDidZoom
计算其高度。
我做错了什么? 请帮忙。
提前致谢。
答案 0 :(得分:5)
我为你的代码做得很好,做了以下修改:
您只需获取scrollview类点,然后可以获得scrollview.contentSize.width,当您放大时可以更改,但scrollview.zoomScale始终保持1.so必须使用contensize.width来计算比例。 / p>
@interface dictViewController : UIViewController<UIWebViewDelegate,UITextFieldDelegate,UIGestureRecognizerDelegate,UIScrollViewDelegate>{
UIScrollView *scrollview;
......................
//scrollview.delegate = self;
for (UIView *view in webViewM.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
// Get UIScrollView object
scrollview = (UIScrollView *) view;
//scrollview.delegate = self;
}
}
/*
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
//NSLog(@"scale zooming %f",scale);
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
//NSLog(@"scrollViewDidZoom %f",scrollview.zoomScale);
}*/
- (void)swipeRightAction:(id)ignored
{
NSLog(@"wid=%f", scrollview.contentSize.width);
NSLog(@"zoomscale=%f", scrollview.zoomScale);
}
答案 1 :(得分:0)
我认为没有一种正确的方法可以从暴露的API中做到这一点,但是有一种hacky方式。
UIWebView
包含UIScrollView
,可以为其授予代理人权限。然后,当缩放更改时,您(委托)将获得一个名为scrollViewDidZoom:
的回调。
为了找到滚动视图,您可以从网络视图中获取subviews
集合并迭代以查看哪一个isKindOfClass:[UIScrollView class]
。
现在,UIWebView
也符合UIScrollViewDelegate
。这可能意味着您正在改变Web视图的实现,这可能是一个坏主意。测试好。