获取UITableView的高度

时间:2013-01-02 09:53:33

标签: iphone xcode uitableview

我使用自定义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的高度?

5 个答案:

答案 0 :(得分:12)

使用contentSize.height的{​​{1}}属性。

我认为你想要用内容大小设置整个tableview,然后设置与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);

答案 1 :(得分:3)

获取UITableView高度的最简单方法

- (CGFloat)tableViewHeight

{
   [tblData layoutIfNeeded];

   return [YOUR_TABLE_NAME contentSize].height;
}

答案 2 :(得分:2)

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

<强>逻辑:

  • UITableView有一个属性,backgroundView是&#34;表格视图的背景视图会自动调整大小以匹配表格视图的大小。&#34;
  • backgroundViewUIView,其bounds属性为CGRect,&#34;定义视图的大小和位置。&#34;
  • CGRect有一个size属性,size有一个height属性

QED

答案 3 :(得分:2)

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

CGFloat tableViewHeight = tableView.bounds.size.height;

答案 4 :(得分:0)

您还可以使用KVO来观察者表视图的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];
      }
    }