我有一个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];
答案 0 :(得分:-1)
setNeedsLayout
表示需要调用- (void)layoutSubviews
个方法。因此,您需要将调整大小代码放在- (void)layoutSubviews
方法中。