【问题标题】:Get UITableView's height获取 UITableView 的高度
【发布时间】:2013-01-02 09:53:32
【问题描述】:

我创建了一个带有自定义UITableViewCellUITableviewUITableViewCell 包含UILabels,并且我根据单元格高度计算了每个单元格的高度。但是我怎样才能获得 tableview 高度?因为基于在 tableView 的高度上我需要计算 滚动视图的高度 单击按钮时,我创建了这样的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的row/height计算ScrollView的高度?

【问题讨论】:

  • 你已经根据单元格高度计算出每个单元格的高度了吗?
  • 是的,我计算了每个单元格的高度。我需要根据每个单元格的高度获取整体的tableview高度。?
  • @Sindhia 我想你想设置 TableView 的高度,它的 contentdata 大小意味着总单元格,然后在滚动视图中添加这个 tableview 的完整大小.. 所以使用下面我的答案。 .

标签: iphone xcode uitableview


【解决方案1】:

使用UITableViewcontentSize.height 属性。

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

UITableView 中添加数据或reloadData 后只需设置以下代码..

    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); 

【讨论】:

  • @Sindhia 还在您的 viewWillAppear 或 viewDidAppear 方法中添加此代码......或者在您在 tableview 中添加数据之后
  • 我在点击按钮时创建 tableView。所以我应该像 self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,150,327,[arr5 count]*205)style:UITableViewStylePlain]; self.tableView.delegate=self; self.tableView.dataSource=self; self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y,self.tableView.frame.size.width, self.tableView.contentSize.height); [self.view addSubview:self.tableView];浮动 ftbl = self.tableView.frame.origin.y + self.tableView.contentSize.height + 15; testscroll.contentSize=CGSizeMake(320, ftbl);
  • 当我这样写时,我看不到 tableview
  • @Sindhia heyyyyy 你在 self.view 老兄中添加了这个 tableview.. 不添加这个只是将它添加到 scrollview 老兄.. 现在我更新现在我发现了问题
  • 我有一个疑问 paras.actually 多少个单元格可以显示默认的tableview?
【解决方案2】:

获取 UITableView 高度的最简单方法

- (CGFloat)tableViewHeight

{
   [tblData layoutIfNeeded];

   return [YOUR_TABLE_NAME contentSize].height;
}

【讨论】:

    【解决方案3】:

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

    CGFloat tableViewHeight = tableView.bounds.size.height;
    

    【讨论】:

      【解决方案4】:

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

      逻辑:

      • UITableView 有一个属性,backgroundView,它是“表视图的背景视图会自动调整大小以匹配表视图的大小。”
      • backgroundView 是一个 UIView,它具有属性 bounds,这是一个 CGRect,它“定义了视图的大小和位置”。
      • CGRect 有一个size 属性,size 有一个height 属性

      QED

      【讨论】:

      • backgroundView 为 nil
      【解决方案5】:

      您也可以使用 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];
            }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2019-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        相关资源
        最近更新 更多