如何动态设置UITableView的高度?

时间:2013-09-13 11:01:59

标签: ios objective-c uitableview

我使用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;
    }
}

5 个答案:

答案 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)

}