如何dynamic设置UITableView的高度?
我有一个tableview与不同的单元格高度使用heightForRowAtIndexPath:
方法。
我想dynamic设置UITableView
的高度。 目前,我正在使用viewDidLoad
方法设置tableView的维度:
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 770, 310, 400)]; self.tableView.dataSource = self; self.tableView.delegate = self;
我想也许我可以添加这个: self.tableView.contentSize.height;
但是问题当然是内容大小只能在表格加载后计算,所以如果我把它放进去
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 770, 310, self.tableView.contentSize.height)];
它不工作。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *description = [photosFromCommentsArray objectAtIndex:indexPath.row]; // NSLog(@"description is %@",description); if(description == (id)[NSNull null]) { return 70; } else { return 200; } }
在表格视图中为contentSize属性添加观察者,并相应地调整框架
[self.tableView addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];
然后在callback中:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { CGRect frame = self.tableView.frame; frame.size = self.tableView.contentSize; self.tableView.frame = frame; }
您可以随时设置tableView的框架。 你甚至可以animation改变大小。
你好你可以用下面的代码得到文本的高度,并根据它设置高度。
CGFloat textViewWidth = CGRectGetWidth(textView.bounds); CGSize inset = CGSizeMake(5.0,5.0); CGSize stringSize = [myString sizeWithFont:textView.font constrainedToSize:CGSizeMake(textViewWidth-2*inset.width,1024) lineBreakMode:UILineBreakModeWordWrap]; BOOL textOutOfFit = stringSize.height+2*inset.height>CGRectGetHeight(textView.bounds);
试试这个viewDidLoad :
[tableView setFrame:CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y + 4, tableView.frame.size.width, tableView.frame.size.height - 65)];