从不同的线程返回后,在UITableView上设置contentInset

Ste*_*n H 3 multithreading objective-c uitableview ios

如何从单独的线程返回后在UITableView上设置内容插入?

这里有一些代码来获取我正在做的事情的要点,也可以在这个问题的范围之外提供建议.

如果没有可用的广告,我的主要目标是折叠webview将进入的区域(由contentInset创建的表格上方的区域).

//In View did Load
[NSThread detachNewThreadSelector:@selector(getBannerAdContent) toTarget:self withObject:nil];


-(void)getBannerAdContent
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSString *html = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://192.168.0.18:83/PhotoGalleryService.svc/LoadBannerAd/"]];
    [self performSelectorOnMainThread:@selector(loadBannerAd:) withObject:html waitUntilDone:NO];
    [pool release];
}


-(void)loadBannerAd:(NSString*)html
{
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 2, 300, 40)];

    [webView loadHTMLString:html baseURL:nil];
    webView.delegate = self;
    webView.scalesPageToFit = NO;
    webView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
    [self.view addSubview:webView];
    [webView release];
    UITableView *myTableView = (UITableView*)[self.view.subviews objectAtIndex:0 ];
    //The following line is doing nothing.
    myTableView.contentInset = UIEdgeInsetsMake(44,0.0,0,0.0);
}
Run Code Online (Sandbox Code Playgroud)

你能给我的任何帮助都将不胜感激.

编辑:一个更彻底的解释......

在我看来,我加载了一个单独的线程.此线程从我设置的服务加载html,然后在webview上设置它.但是,当我走进线路之前,我正在逐步完成

myTableView.contentInset = UIEdgeInsetsMake(44,0.0,0,0.0);
Run Code Online (Sandbox Code Playgroud)

表视图已加载,然后上面的行无效.

干杯,

小智 5

contentInset设置插入大小,但不滚动tableview以显示它.设置contentInset后,如果要向上滚动以显示表视图的顶部,请设置contentOffset.

myTableView.contentOffset = CGPointZero;
Run Code Online (Sandbox Code Playgroud)

  • 我不知道它是否只是iOS7,但是当顶部插入时将contentOffset设置为0将不会滚动到视图的顶部.要实现滚动到顶部的效果,您必须将偏移设置为CGPointMake(0,-scrollView.contentInset.top) (6认同)