Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UITableView单元格上使用动态高度时UITableView内容大小_Ios_Objective C_Uitableview_Xamarin.ios - Fatal编程技术网

Ios 在UITableView单元格上使用动态高度时UITableView内容大小

Ios 在UITableView单元格上使用动态高度时UITableView内容大小,ios,objective-c,uitableview,xamarin.ios,Ios,Objective C,Uitableview,Xamarin.ios,我已经找了好几个小时了,但是没有找到一个方法 我有一个UITableView的UITableView单元格使用AutomaticDimension表示高度: tableView.RowHeight = UITableView.AutomaticDimension; tableView.EstimatedRowHeight = 160f; 问题是当我尝试获取tableView的ContentSize时。它似乎是基于EstimatedRowHeight而不是其行的当前高度来计算的。假设有10个单元

我已经找了好几个小时了,但是没有找到一个方法

我有一个
UITableView
UITableView单元格
使用
AutomaticDimension
表示高度:

tableView.RowHeight = UITableView.AutomaticDimension;
tableView.EstimatedRowHeight = 160f;
问题是当我尝试获取tableView的
ContentSize
时。它似乎是基于
EstimatedRowHeight
而不是其行的当前高度来计算的。假设有10个单元格,则ContentSize的返回值为160x10

那么我的问题是,是否有办法做到这一点


任何帮助都将不胜感激。。。我使用Xamarin.iOS,但Obj-C和Swift答案显然是受欢迎的:)

我有一个场景,需要知道contentSize,以便在具有不同高度的不同单元格计数的非全屏tableView上设置框架。然后我将调整tableView(通过NSLayoutConstraint)为该内容的高度

尽管我觉得有点粗糙,但以下方法还是有效的:

在“viewDidLoad”中设置所有代码
将行高设置为自动
将estimatedRowHeight设置为比我预期的单元格更大(在本例中,我不希望单元格的高度超过约60分,因此将estimatedRowHeight设置为120)
将tableView重新加载包装到动画块中,然后查询contentSize并在完成块中采取适当的操作

- (void)viewDidLoad {
    [super viewDidLoad]; 

    self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 120.0;

    [UIView animateWithDuration:0 animations:^{
        [self.tableView reloadData];
    } completion:^(BOOL finished) {
        self.tableViewHeight.constant = self.tableView.contentSize.height;
        [self.view layoutIfNeeded];
    }];
}

我认为@Daniel J的答案之所以有效,是因为动画完成处理程序的调度方式——从表面上看,无法保证在动画完成之前会发生表重新加载

我认为更好的解决方案是(在Swift中,因为这就是我所使用的):-

因为我想要的效果,我实际上使用了动画延迟,但它的持续时间也为零。每次更新表内容时,我都调用此函数,并根据需要设置动画和大小

self.coins = coins
tableView.reloadData()
view.layoutIfNeeded()
tableViewHeightConstraint.constant = tableView.contentSize.height
view.layoutIfNeeded()

在没有UITableViewAutomaticDimension和EstimateDroweight的情况下工作。iOS 11

为什么需要tableView的contentSize?@ShehzadAli,因为它嵌入到ScrollView中。我知道不推荐使用它,但它是一个相当复杂的用户界面-它有一个类似于Twitter应用程序的动画标题,因此很难将其作为UITableViews的标题。获取内容大小后,您将做什么。我认为你们有不同的问题,你们试图以错误的方式解决它。您可以共享您的UI并共享您实际尝试执行的操作的更多详细信息吗?@ShehzadAli My UtableView已禁用滚动,因此在获取UtableView的ContentSize后,我将尝试根据该值设置ScrollView的ContentSize UtableView具有滚动的默认属性,并且它可以根据数据源将单元格出列。我觉得您不需要设置scrollView的内容大小。不过,如果要继续这种方法,可以在字典中针对键(indexpath)设置heightforrow,最后可以对这些值求和。但我不这么认为,这是个好办法。
self.coins = coins
tableView.reloadData()
view.layoutIfNeeded()
tableViewHeightConstraint.constant = tableView.contentSize.height
view.layoutIfNeeded()