XCode UIView在TableView的第一个Cell原点之上

时间:2012-12-04 14:22:02

标签: iphone ios uitableview

我有一个UITableViewController,其UITableView位于其中,在UIView下有一个UIView和一个原型单元

UIView的内容是动态的,所以我想更改第一行动态的原点(y)。

当我更改UIView框架和边界

self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width, self.albumView.frame.size.height+100);
self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width, self.albumView.frame.size.height+100);

UIView重叠并隐藏行(我只能看到标题)

当我写相同的代码时,

但是 (void)viewWillAppear 它工作正常,但问题是我不知道高度,因为我还没有从请求中收到数据。

我试过

[self.view setNeedsDisplay];
[self.tableView setNeedsDisplay];

但似乎没有任何效果。我该如何解决这个问题?

我在TableViewController布局中添加了一个快照

http://preview.otherlap.com/snap.png (我无法添加图片,因为我是新用户,因此有链接)

根据json数据,UIView的高度是动态的。 我想要的只是改变表格第一行的原点(y)位置。

这是一个示例代码

    -(void)viewWillAppear:(BOOL)animated{
         //self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+100);
       //self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+100);
    }
     - (void)viewDidLoad
 {

    [super viewDidLoad];
     ...load some data from server
 }
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    [jsonData setLength:0];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [jsonData appendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
 self.albumView.bounds=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+dynamicHeight);  self.albumView.frame=CGRectMake(0,0,self.albumView.frame.size.width,self.albumView.frame.size.height+dynamicHeight);
}

如果我在ViewWillAppear上设置UIView高度,它会正确移动第一个单元格的原点。如果我在connectionDidFinishLoad上设置高度,它会与Cells重叠。

编辑: 找到了答案 好吧,我自己找到了答案..

在StoryBoard上的TableView上添加UiView会自动使其成为tableHeaderView

所以解决方案就是那个

CGRect newFrame = self.tableView.tableHeaderView.frame;
newFrame.size.height = DynamicHeight;
self.tableView.tableHeaderView.frame = newFrame;
[self.tableView setTableHeaderView:self.tableView.tableHeaderView];

1 个答案:

答案 0 :(得分:-1)

setNeedsLayout表示需要调用- (void)layoutSubviews个方法。因此,您需要将调整大小代码放在- (void)layoutSubviews方法中。