尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度

Posted

技术标签:

【中文标题】尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度【英文标题】:Trying to dynamically increase height of UITableView while user adds rows to UITableView in iOS 【发布时间】:2015-10-12 00:09:55 【问题描述】:

我正在开发一个应用程序,用户可以在其中动态地将行添加到 UITableView。这部分工作正常。但是,在我的 ios 屏幕上,无论有多少行,UITableView 的高度都是静态的。一旦行数增加到超过某个点,用户必须滚动才能看到其他单元格。

我想做的是随着用户添加的每一行动态增加表格的高度。因此,例如,如果我有一个 tableView,如果用户添加一行,我希望 tableview 高 50px,如果用户添加 2 行,表格的高度会动态增加到 100px,直到达到最大值高度为 250 像素。我动态添加行的代码如下:

- (IBAction)addRow:(id)sender 

    NSString *theObjectToInsert = [NSString stringWithFormat:@"Row #: %lu", (unsigned long)[self.tableData count]];
    [self.tableData addObject:theObjectToInsert];
    NSIndexPath *newPath=[NSIndexPath indexPathForRow:self.tableData.count-1 inSection:0];
    [self.choiceTable insertRowsAtIndexPaths:@[newPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self.choiceTable scrollToRowAtIndexPath:newPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

如何将 UITableView 的动态增长与行数的增加结合起来?

【问题讨论】:

【参考方案1】:

为了清楚起见,当您说现在静态设置桌面高度时,我会假设这不是我们所希望的,而您确实希望它是动态的。

如果建议每次添加行时,检查已添加的所有行的高度。你可以通过调用已经在UITableViewDataSource 协议中实现的方法来做到这一点。

CGFloat maxDynamicTableHeight = 250.0f;

NSInteger numberOfSections = [self numberOfSectionsInTableView:self.tableView];

CGFloat runningHeight = 0.0f;

for (int section = 0; section < numberOfSections && runningHeight < maxDynamicTableHeight; section++) 
    NSInteger numberOfRows = [self tableView:self.tableView numberOfRowsInSection:section];
    for (int row = 0; row < numberOfRows && runningHeight < maxDynamicTableHeight; row++) 
        runningHeight += [self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
    


CGRect frame = self.tableView.frame;
frame.size.height = (runningHeight > maxDynamicTableHeight) ? maxDynamicTableHeight : runningHeight;
Self.tableView.frame = frame;

抱歉,如果有任何明显的问题,我正在使用移动设备,所以我现在无法测试这个。

【讨论】:

非常感谢您的回复。我正在尝试运行您的代码,但出现运行时异常:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[MyViewController tableView:heightForRowAtIndexPath:]: unrecognized selector sent to instance 0x7fdc3ad185d0”有什么想法吗? 你的视图控制器是否实现了UITableViewDataSource 是的。我实现了 UITableViewDelegate 和 UITableViewDataSource。 你的viewController中有tableView:heightForRowAtIndexPath:吗?

以上是关于尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度的主要内容,如果未能解决你的问题,请参考以下文章

在ios的uitableview中自定义单元格编辑样式

标题选择 UITableview 中的多个部分

iOS 7.0 UITableView backgroundView 中的控件禁用了用户交互

UITableView 以编程方式调用滑动操作

UITableView以编程方式调用滑动操作

iOS使用数组添加到UITableView