我想根据单元格的高度之和从另一个视图控制器更改我的表视图的高度,因为它们是动态的。这有可能吗?谢谢
附加组件:
基本上我有一个UserProfileViewController,它在半个屏幕上有一个容器视图。在这里,我添加了不同的其他视图控制器:
在墙壁按钮的情况下,这是我添加视图控制器及其后续的tableview的方式:
- (IBAction)wallButtonPressed:(id)sender
{
//Check if there is an instance of the viewcontroller we want to display. If not make one and set it's tableview frame to the container's view bounds
if(!_userWallViewController) {
self.userWallViewController = [[WallViewController alloc] init];
// self.userWallViewController.activityFeedTableView.frame = self.containerView.bounds;
}
[self.userWallViewController.containerView addSubview:self.userWallViewController.activityFeedTableView];
//If the currentviewcontroller adn it's view are already added to the hierarchy remove them
[self.currentViewController.view removeFromSuperview];
[self.currentViewController removeFromParentViewController];
//Add the desired viewcontroller to the currentviewcontroller
self.currentViewController = self.userWallViewController;
//Pass the data needed for the desired viewcontroller to it's instances
self.userWallViewController.searchURLString = [NSString stringWithFormat:@"event/user/%@/", self.userID];
self.userWallViewController.sendCommentURLString = [NSString stringWithFormat:@"event/message/%@", self.userID];
[self.userWallViewController.activityFeedTableView reloadData];
self.userWallViewController.totalCellHeight = ^(float totalCellHeight){
self.scrollView.contentSize = CGSizeMake(320.0, totalCellHeight);
CGRect newFrame = self.userWallViewController.containerView.frame;
newFrame.size.height = totalCellHeight + 33.0;
self.userWallViewController.containerView.frame = newFrame;
self.userWallViewController.activityFeedTableView.frame = self.containerView.bounds;
};
//Add this containerview to the desired viewcontroller's containerView
self.userWallViewController.containerView = self.containerView;
//Add the needed viewcontroller and view to the parent viewcontroller and the containerview
[self addChildViewController:self.userWallViewController];
[self.containerView addSubview:self.userWallViewController.view];
//CLEAN UP THE CONTAINER VIEW BY REMOVING THE PREVIOUS ADDED TABLE VIEWS
[self.userFansViewController.userSimpleTableView removeFromSuperview];
[self.fanOfViewController.userSimpleTableView removeFromSuperview];
[self.userPublishedMovellaListViewController.gridView removeFromSuperview];
[self.userPublishedMovellaListViewController removeFromParentViewController];
self.userPublishedMovellaListViewController = nil;
}
在视图控制器中,这是我初始化表视图的地方:
-(UITableView *)activityFeedTableView
{
if (!_activityFeedTableView) {
_activityFeedTableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 850.0) style:UITableViewStylePlain];
}
return _activityFeedTableView;
}
我正在计算单元格高度的总和,问题是单元格的高度方法是在调用tableview的getter方法之后调用的。因此,我需要某种方法来了解所有单元格的height方法何时完成,然后我可以调整我的表视图的大小。谢谢
发布于 2015-05-19 22:21:40
通过xib或故事板创建单元格。提供它的outlet的内容。现在在CellForRowAtIndexPath中调用它。例如:如果您想根据注释的标签文本设置单元格高度。
所以设置你的commentsLbl.numberOfLine=0;
所以设置你的commentsLbl.numberOfLine=0;
然后在ViewDidLoad中
self.table.estimatedRowHeight = 44.0 ;
self.table.rowHeight = UITableViewAutomaticDimension;
而现在
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
发布于 2017-01-17 11:06:50
这里的许多答案都不考虑表的变化,或者太复杂了。在使用自动布局时,使用可以正确设置intrinsicContentSize
的UITableView
子类是一个容易得多的解决方案。不需要高度限制等。
class UIDynamicTableView: UITableView
{
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIViewNoIntrinsicMetric, height: self.contentSize.height)
}
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
}
在接口构建器中将TableView的类设置为UIDynamicTableView
,看看这个TableView在调用reloadData()
之后会改变它的大小。
发布于 2016-05-11 23:54:44
只需在viewDidAppear中编写一行代码,就可以大大简化这一过程:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
tableViewHeightConstraint.constant = tableView.contentSize.height
}
https://stackoverflow.com/questions/14223931
复制相似问题