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

时间:2011-01-26 21:26:05

标签: objective-c multithreading ios uitableview

如何在从单独的线程返回后在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);
}

非常感谢您给我的任何帮助。

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

在我的视图中,我加载了一个单独的线程。此线程从我设置的服务加载html,然后在webview上设置它。然而,正如我正在逐步完成,在它到达行之前

myTableView.contentInset = UIEdgeInsetsMake(44,0.0,0,0.0);

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

干杯,

2 个答案:

答案 0 :(得分:5)

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

myTableView.contentOffset = CGPointZero;

答案 1 :(得分:0)

对于Swift5和UITableView

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if shouldAddContentInset {
        tableView.contentInset = UIEdgeInsets(top: 100, left: 0, bottom: 0, right: 0)
        tableView.contentOffset = CGPoint(x: 0, y: -tableView.contentInset.top)
    }
}

然后通过某些回调函数或委托:

func gotResponseFromSomewhere() {
    shouldAddContentInset = true
    viewDidLayoutSubviews()
}