调用[tableView reloadData]会恢复帧更改

时间:2013-05-03 00:17:35

标签: iphone ios objective-c uitableview ios6

我的应用中UITableView内的UIView内有UIViewController

UITableView之上,我有UISearchBar来过滤UITableView。我不想使用传统的UISearchBar,因为它是一个非常自定义的应用程序。

我正在订阅键盘出现和消失时的通知,我正在相应调整UITableView的大小。我遇到的问题是,只要我搜索并过滤UITableView,我就会调用:

[self.tableView reloadData];

仅显示过滤结果。问题是, UITableView将自身调整回其原始高度,从而在键盘后面隐藏了一些单元格。

有人能告诉我如何改变这种行为吗?

3 个答案:

答案 0 :(得分:4)

这听起来像是一个自动布局问题 - 这些问题通常会在某些操作导致视图重绘后出现。如果您正在使用自动布局,则应通过调整约束来调整表视图(或其包含视图)的大小,而不是通过设置框架。一种方法是将IBOutlet设置为视图底部的约束,并在代码中修改其常量。

答案 1 :(得分:0)

要调试它,我将创建UITableView的子类,并覆盖setBounds:方法以查看谁正在修改它。一旦理解并解决了问题,您就可以丢弃UITableView子类并返回使用正常的东西。

- (void)setBounds:(CGRect)bounds
{
    // Break point here and inspect stack
    [super setBounds:bounds];
}

答案 2 :(得分:0)

我遇到了类似的问题 - 与键盘无关,但我试图调整表的大小并在同一事件上重新加载表数据。

似乎有用的是调用tableCell:cellForRowAtIndexPath内的表调整大小方法。为了提高效率,我还给ViewContoller一个BOOL,关于表是否已经重新定位,以便不为每个出现的单个单元重新定位表。