首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动态更改UITableView高度

动态更改UITableView高度
EN

Stack Overflow用户
提问于 2013-01-09 05:00:48
回答 7查看 120.7K关注 0票数 63

我想根据单元格的高度之和从另一个视图控制器更改我的表视图的高度,因为它们是动态的。这有可能吗?谢谢

附加组件:

基本上我有一个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方法何时完成,然后我可以调整我的表视图的大小。谢谢

EN

回答 7

Stack Overflow用户

发布于 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;}
票数 21
EN

Stack Overflow用户

发布于 2017-01-17 11:06:50

这里的许多答案都不考虑表的变化,或者太复杂了。在使用自动布局时,使用可以正确设置intrinsicContentSizeUITableView子类是一个容易得多的解决方案。不需要高度限制等。

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()之后会改变它的大小。

票数 10
EN

Stack Overflow用户

发布于 2016-05-11 23:54:44

只需在viewDidAppear中编写一行代码,就可以大大简化这一过程:

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        tableViewHeightConstraint.constant = tableView.contentSize.height
    }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14223931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档