Смещение при отображении UITableView - PullRequest
0 голосов
/ 14 мая 2009

Я отображаю UITableView, и время от времени первая строка появляется внизу представления.

Нет ничего выше первого ряда, и пустое пространство не трогается.

Пока что я проверил:

  • headerView tableView: пусто
  • использовать обычный UITableViewCells
  • проверка строкиВысота клеток
  • проверить кадр ячеек
  • при возникновении ошибки предупреждение о памяти до
  • проверить contentOffset представления прокрутки таблицы

Эта ошибка появляется только на iPhone, но не на симуляторе.

На скриншоте слева показан правильный вид таблицы, а справа вид с ошибкой. Делая снимок, я коснулся экрана, чтобы была видна полоса прокрутки.

Есть идеи, в каком направлении мне смотреть?

Я только что увидел, что contentSize для tableView scrollView неверен: у меня 84 ячейки при 67 пикселях и 1 ячейка при высоте 57 пикселов: всего должно быть 5685, но 6005. (отключено на 320). Странно.

Stephan

альтернативный текст http://www.quicksnapper.com/files/5161/18374733084A0B3EA24D152.png

Ответы [ 2 ]

1 голос
/ 14 мая 2009

Вы можете переопределить метод touchesBegan UITableView, а затем запустить тест на попадание.

Затем спросите возвращаемое представление, какой это класс.

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

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

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

NSLog([[whatIsThis class] description]);


}

По крайней мере, у вас будет отправная точка. Вы также можете спросить, кто его супервизор.

0 голосов
/ 15 мая 2009

Итак, я нашел решение своей проблемы:

Добавление NSLog (@ ""). Это странно.

На мой взгляд, WillAppear у меня есть

  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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...