显示UITableView时偏移

时间:2009-05-13 21:59:45

标签: iphone cocoa-touch uitableview

我显示了一个UITableView,并且有时第一行出现在视图的底部。

第一行上方没有任何内容,空白区域无法触及。

到目前为止,我已经检查过:

  • tableView的headerView:为空
  • 使用普通的UITableViewCells
  • 检查单元格的rowHeight
  • 检查单元格的框架
  • 当错误发生时,
  • 之前没有内存警告
  • 检查表滚动视图的contentOffset

此错误仅出现在iPhone上,绝不会出现在模拟器上。

屏幕截图左侧显示正确的tableview,右侧显示有bug的视图。在进行快照时,我触摸了屏幕,以便滚动条可见。

我应该在什么方向看看?

我刚看到tableView scrollView的contentSize错误:我有84个单元格@ 67像素和1个单元格@ 57像素高度:总数应该是5685但是6005.(关闭320)。奇怪。

斯蒂芬

alt text http://www.quicksnapper.com/files/5161/18374733084A0B3EA24D152.png

2 个答案:

答案 0 :(得分:1)

您可以覆盖UITableView的touchesBegan方法,然后运行命中测试。

然后询问视图返回它是什么类。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

CGPoint location = [[touches anyObject] locationInView:self]; 

UIView *whatIsThis = [self hitTest:locationInView withEvent:event];

NSLog([[whatIsThis class] description]);


}

至少你会有一个起点。你也可以问一下它的superView是谁。

答案 1 :(得分:0)

所以我找到了解决问题的方法:

添加NSLog(@“”)。这很奇怪。

在我的viewWillAppear中,我有

  if (searchByCuisinier || searchByResto) {
    NSLog(@"Will set tableHeaderView");
    self.tableView.tableHeaderView = searchBar;
    if (searchByCuisinier) {
      searchBar.placeholder = @"Cuisinier";
    } else {
      searchBar.placeholder = @"Restaurant";
    }
    searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;
    searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
    if ([filteredList count] == 0)
      [searchBar becomeFirstResponder];
  } else {
    self.tableView.tableHeaderView = nil;
    NSLog(@""); // Magic!
  }

添加NSLog(@“”)解决了这个错误。

同时扭转测试: 而不是

  if (searchByCuisinier || searchByResto) {
....

我做:

  if (!searchByCuisinier && !searchByResto) {
....

我完全不知道为什么会这样(或者为什么没有NSLog就无法工作)。