如何根据uitableview

时间:2016-03-09 05:14:05

标签: ios objective-c iphone uitableview uiscrollview

目前,我开发的项目是 UIScrollView,UITableView,另外3个UIView输入和最后的UIButton 。在该页面中,UIScrollView高度将根据UITableView的高度动态增加。

对于UITableView,没有更多滚动。它的高度也将根据Async加载的 JSON数据添加的行数增加,如下所示。

productHeight = 44;
productHeight *= _nsOrderItems.count;
productHeight = productHeight + 100;

if (isHeaderTap) {
    self.productTableHeight.constant = 50;
} else {
    self.productTableHeight.constant = productHeight;
}

//then the tableView must be redrawn
[self.productTable setNeedsDisplay];

我的问题是我想根据UITableView的高度增加UIScrollView的高度。

- (void)viewDidLayoutSubviews {
    [self.scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width, _btnEdit.frame.origin.y + _btnEdit.frame.size.height)];
}

2 个答案:

答案 0 :(得分:4)

你绝对可以这样做,

  1. 首先确保您的单元格子视图的约束必须设置为从上到下,以便计算单元格所需的高度。

  2. 确保您的委托设置如下

    -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
      return 44;
     } 
    
     -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;
     }
    
  3. 设置tableView的高度约束并使该约束出口。

  4. 将以下方法添加到您想要动态调整tableView大小的类中。

    - (void)adjustHeightOfTableview
    {
        CGFloat height = self.tableView.contentSize.height;
        //CGFloat maxHeight = self.tableView.superview.frame.size.height - self.tableView.frame.origin.y;
    
       /* 
        Here you have to take care of two things, if there is only    tableView on the screen then you have to see is your tableView going below screen using maxHeight and your screen height,
     Or you can add your tableView inside scrollView so that your tableView can increase its height as much it requires based on the number of cell (with different height based on content) it has to display.
       */
    
       // now set the height constraint accordingly
        self.constraintHeightTableView.constant = height;
    
       //If you want to increase tableView height with animation you can do that as below.
    
        [UIView animateWithDuration:0.5 animations:^{
        [self.view layoutIfNeeded];
        }];
    }
    
  5. 准备好表格的dataSource后调用此方法,并将方法调用为

    dispatch_async(dispatch_get_main_queue(), ^{
    
       [self.tableView reloadData];
    
       //In my case i had to call this method after some delay, because (i think) it will allow tableView to reload completely and then calculate the height required for itself. (This might be a workaround, but it worked for me)
       [self performSelector:@selector(adjustHeightOfTableview) withObject:nil afterDelay:0.3];
    });
    

答案 1 :(得分:1)

// Get the supposed to be height of tableview 
CGFloat height = self.tableViewMenu.contentSize.height;
 // get the height constraint of tableview and give it you respected height
self.constraintHeightTableView.constant = height;
    // set the scroll 

注意: - 不要忘记禁止从故事板或以编程方式滚动表格

self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, self.viewUserLogin.frame.size.height + height);
    [self.scrollView layoutIfNeeded];