我的应用中UITableView
内的UIView
内有UIViewController
。
在UITableView
之上,我有UISearchBar
来过滤UITableView
。我不想使用传统的UISearchBar
,因为它是一个非常自定义的应用程序。
我正在订阅键盘出现和消失时的通知,我正在相应调整UITableView
的大小。我遇到的问题是,只要我搜索并过滤UITableView
,我就会调用:
[self.tableView reloadData];
仅显示过滤结果。问题是, UITableView将自身调整回其原始高度,从而在键盘后面隐藏了一些单元格。
有人能告诉我如何改变这种行为吗?
答案 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
,关于表是否已经重新定位,以便不为每个出现的单个单元重新定位表。