Iphone 调用[tableView reloadData]可恢复帧更改
在我的应用程序中,我有一个Iphone 调用[tableView reloadData]可恢复帧更改,iphone,ios,objective-c,uitableview,ios6,Iphone,Ios,Objective C,Uitableview,Ios6,在我的应用程序中,我有一个UITableView在UIViewController内 在UITableView上方,我有一个UISearchBar,用于过滤UITableView。我不想使用传统的UISearchBar,因为它是一个非常定制的应用程序 我订阅键盘出现和消失的通知,并相应调整UITableView的大小。我遇到的问题是,只要我搜索并过滤UITableView,我就会调用: [self.tableView reloadData]; 仅显示过滤后的结果。问题是,UITableView
UITableView
在UIViewController
内
在UITableView
上方,我有一个UISearchBar
,用于过滤UITableView
。我不想使用传统的UISearchBar
,因为它是一个非常定制的应用程序
我订阅键盘出现和消失的通知,并相应调整UITableView
的大小。我遇到的问题是,只要我搜索并过滤UITableView
,我就会调用:
[self.tableView reloadData];
仅显示过滤后的结果。问题是,UITableView将自身大小调整回其原始高度,从而仍将一些单元格隐藏在键盘后面
有人能告诉我如何更改此行为吗?若要调试此行为,我将创建
UITableView
的子类,并重写setBounds:
方法以查看是谁在修改它。一旦理解并解决了这个问题,就可以扔掉UITableView子类,重新使用正常的东西
- (void)setBounds:(CGRect)bounds
{
// Break point here and inspect stack
[super setBounds:bounds];
}
这听起来可能是一个自动布局问题——这些问题通常在某些操作导致视图重新绘制自身后出现。如果使用自动布局,则应通过调整约束而不是设置框架来调整表视图(或其包含视图)的大小。一种方法是在视图底部创建一个约束的IBOutlet,并在代码中修改其常量。我遇到了一个类似的问题——与键盘无关,但我试图在同一事件上调整表的大小并重新加载表数据
似乎有效的方法是在
tableCell:cellforrowatinexpath
中调用表大小调整方法。为了提高效率,我还向ViewContoller提供了一个BOOL
,说明表格是否已经重新定位,以便表格不会针对出现的每个单元格重新定位。您确定这是高度更改而不是位置更改吗?我想这只是重置回故事板中提供的原始约束,因此,它可能不仅仅是在改变高度,而是在做更多的事情,但是出于所有的意图和目的,这就是我所看到的。当你重新加载你的桌子时,你是否隐藏了键盘?没有回答问题,应该是一个注释。@Mar0ux,很抱歉。无法在注释中发布代码。