我使用heightForRowAtIndexPath:
方法获得了具有不同单元格高度的tableview。
我想动态设置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;
}
}
答案 0 :(得分:19)
在表视图上添加contentSize属性的观察者,并相应地调整框架
[self.tableView addObserver:self forKeyPath:@"contentSize" options:0 context:NULL];
然后在回调中:
- (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;
}
答案 1 :(得分:0)
您可以随时设置tableView的框架。您甚至可以设置该变化的动画。
答案 2 :(得分:0)
你好你可以用下面的代码获得文本的高度,并根据它设置高度。
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);
答案 3 :(得分:0)
在 viewDidLoad :
中尝试此操作[tableView setFrame:CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y + 4, tableView.frame.size.width, tableView.frame.size.height - 65)];
答案 4 :(得分:0)
步骤1:在viewDidLoad()中添加观察者
self.tableView.addObserver(self, forKeyPath: "contentSize", options: [], context: nil)
第2步:添加方法
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
self.tableViewHeight.constant = tableView.contentSize.height
}
第3步:删除观察者
override func viewDidDisappear(_ animated: Bool) {
self.removeObserver(self, forKeyPath: "contentSize", context: nil)
}