相关疑难解决方法(0)

webViewDidFinishLoad:太快开火?

我正在尝试通过在加载页面时隐藏webView来加载不同的网页.但是,我看到一些图像密集型网站导致webViewDidFinishLoading过快启动,当我在那时显示webView然后一瞬间你得到上一页的视图.关于如何解决这个问题的任何想法?

iphone

12
推荐指数
1
解决办法
5542
查看次数

UIWebView不完全加载,高度变化

我有一个包含一些标签的视图控制器和一个在其中加载一些html的UIWebView.所有这些标签和UIWebView都是UIScrollView的子视图.我已禁用UIWebView的滚动,因此标签和UIWebView在UIScrollView中一起滚动.

然后我找到了UiWebView内部的内容大小,根据内容大小更改了UIWebView大小,然后将滚动视图的大小设置为webview的大小.这是我通过在webViewDidFinishLoad中添加以下代码来实现的:

CGRect frame = myWebView.frame;
frame.size.height = 1;
myWebView.frame = frame;
CGSize fittingSize = [myWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
myWebView.frame = frame;

NSLog(@"size: %f, %f", fittingSize.width, fittingSize.height);

mainScrollView.contentSize = myWebView.bounds.size; 
Run Code Online (Sandbox Code Playgroud)

当我使用NSLog来查看webview内容的大小时,我注意到它为相同的内容提供了不同的高度.例如,如果我第一次打开视图控制器,它会显示高度等于915.0,当我在导航中向后移动并返回到该视图控制器时,日志将显示大小为1012.0.

我相信这可能是由于html内容中的图片加载.任何人都可以告诉我如何修复它以便第一次显示正确的高度?谢谢!

更新:如果我使用javascript使用不同的策略,我已经尝试使用以下代码:

CGRect oldBounds = [[self myWebView] bounds];
CGFloat height = [[myWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
NSLog(@"NEW HEIGHT %f", height);
[myWebView setBounds:CGRectMake(oldBounds.origin.x, oldBounds.origin.y, oldBounds.size.width, height)];
mainScrollView.contentSize = myWebView.bounds.size;
Run Code Online (Sandbox Code Playgroud)

这段代码每次在日志中给我正确的高度,这正是我想要的,但整个webview向上移动了一点,阻止了它上面的所有标签.我做错了什么以及如何解决它?谢谢!

objective-c uiwebview uiscrollview ios

6
推荐指数
1
解决办法
3925
查看次数

用于异步Web服务调用的NSURLConnection NSURLRequest代理

我有多个视图相同NSURLRequest/NSURLConnection request.理想情况下,为了获得一些代码重用,我想要某种"代理"来完成创建/执行(异步)请求/连接,设置所有委托方法等所有基础工作. ,所以我不必NSURLConnection在每个视图中复制所有委托方法处理程序.首先,这种设计方法是否合理?第二,我将如何做这样的事情?

对于一些背景信息,我尝试了这个并让它"工作",但是,它似乎不是异步执行.我创建了一个Proxy.h/m文件,其中包含不同Web服务调用的实例方法(还包含NSURLConnection委托方法):

@interface Proxy : NSObject {

    NSMutableData *responseData;
    id<WSResponseProtocol> delegate;
}

- (void)searchForSomethingAsync:(NSString *)searchString delegate:(id<WSResponseProtocol>)delegateObj;

@property (nonatomic, retain) NSMutableData *responseData;
@property (assign) id<WSResponseProtocol> delegate;

@end
Run Code Online (Sandbox Code Playgroud)

WSResponseProtocol定义如下:

@protocol WSResponseProtocol <NSObject>

@optional
- (void)responseData:(NSData *)data;
- (void)didFailWithError:(NSError *)error;

@end
Run Code Online (Sandbox Code Playgroud)

要使用它,视图控制器只需要符合WSResponseProtocol协议,以捕获响应.进行Web服务调用是这样完成的:

Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
Run Code Online (Sandbox Code Playgroud)

我可以提供更多代码,但剩下的可以假设.在打电话之前,我"开始动画"一个UIActivityIndicatorView微调器.但旋转器从不旋转.如果我只是将NSURLConnection委托方法直接放在视图控制器中,那么微调器就会旋转.所以,它让我觉得我的实现不是异步执行的.这里有什么想法/想法吗?

iphone asynchronous uiviewcontroller nsurlconnection nsurlrequest

5
推荐指数
1
解决办法
3万
查看次数