10

我已经创建了一个UITableview自定义的UITableViewCellUITableViewCell包含UILabels并且我已经根据单元格的高度计算了每个单元格的高度。但是我怎样才能得到 tableview 的高度?因为根据 tableView 的高度我需要计算我创建的 scrollView 的高度UITableView单击按钮时是这样的:

-(IBAction)btnClicked:(id)sender
{
    self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,150,327,[arr5 count]*205) style:UITableViewStylePlain];
    self.tableView.delegate=self;
    self.tableView.dataSource=self;
    self.tableView.scrollEnabled = NO;
    [self.view addSubview:self.tableView];
    float fscrview = 150 + self.tableView.frame.size.height + 20;
    testscroll.contentSize=CGSizeMake(320, fscrview);
  }
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  {
  NSString *city1 = city.text;
        UIFont *font = [UIFont fontWithName:@"Helvetica" size:14.0];
        CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
        CGSize bounds = [city1 sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
//similarly calculated for all 
   return (CGFloat) cell.bounds.size.height + bounds.height+bounds1.height+bounds2.height+bounds3.height+bounds4.height+bounds5.height;
  }

我可以通过这个获得 tableViewCells 的高度。之后如何计算/设置 tableView 的整体高度?

以及如何根据tableView的行/高计算ScrollView的高度?

4

5 回答 5

13

使用contentSize.height的属性UITableView

我想你想用内容大小设置整个表格视图,然后设置滚动视图大小相关的内容,UITableView并为此使用下面的代码......

添加数据或仅设置以下代码reloadData后..UITableView

    yourTableView.frame = CGRectMake(yourTableView.frame.origin.x,yourTableView.frame.origin.y, yourTableView.frame.size.width, yourTableView.contentSize.height);

    float ftbl = yourTableView.frame.origin.y + yourTableView.contentSize.height + 15;
    yourScrollView.contentSize=CGSizeMake(320, ftbl);

更新:

self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,150,327,[arr5 count]*205)style:UITableViewStylePlain]; 
self.tableView.delegate=self; 
self.tableView.dataSource=self;

[testscroll addSubview:self.tableView]; /// add this tableview in scrollview not in self.view
[self.tableView reloadData];
self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width, self.tableView.contentSize.height);
float ftbl = self.tableView.frame.origin.y + self.tableView.contentSize.height + 15; 
testscroll.contentSize=CGSizeMake(320, ftbl); 
于 2013-01-02T10:02:52.187 回答
4

获取 UITableView 高度的最简单方法

- (CGFloat)tableViewHeight

{
   [tblData layoutIfNeeded];

   return [YOUR_TABLE_NAME contentSize].height;
}
于 2013-01-02T11:20:09.340 回答
3

在 iOS 8+ 上,这可以获取表格视图高度

CGFloat tableViewHeight = tableView.bounds.size.height;
于 2016-03-31T18:22:09.713 回答
2

试试这个:tableView.backgroundView.bounds.size.height应该工作

逻辑:

  • UITableView有一个属性,backgroundView即“表视图的背景视图会自动调整大小以匹配表视图的大小”。
  • backgroundView是一个具有UIView“定义视图的大小和位置”的属性。boundsCGRect
  • CGRectsize有财产sizeheight有财产_

量子点

于 2013-01-02T10:04:50.643 回答
2

您还可以使用 KVO 来观察 tableview 的 contentSize 属性并在其他视图中调整您需要的内容。

把它放在某个地方,例如在 viewDidLoad 中:

[self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionInitial context:nil];

然后实现观察者:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
      if (object == self.tableView) {
        self.scrollViewHeightConstraint.constant = self.tableView.contentSize.height;
      }
      else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
      }
    }
于 2019-10-17T06:55:59.980 回答