尝试在用户向 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 的高度的主要内容,如果未能解决你的问题,请参考以下文章