Сбой UITableview во время масштабирования - PullRequest
1 голос
/ 06 октября 2011

iOS5: сбой UITableview при увеличении масштаба
Шаги:
1. Откройте стол
2. Увеличьте масштабирование жестом
Сбой на iOS5 !!! SIGABRT
на iOS 4.x работает нормально
В чем может быть причина?

Сигнал SIGABRT после

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return tableView;
}


*** Terminating app due to uncaught exception 'NSGenericException', reason: 
'The view returned from viewForZoomingInScrollView: must be a subview of the scroll view.
 It can not be the scroll view itself.'

Ответы [ 3 ]

1 голос
/ 13 октября 2011

Я только что установил XCode 4.2 и iOS5 на свой тестовый iPad сегодня, и у меня возникла та же проблема.

Я мог бы решить проблему, наблюдая за примером кода от Apple с именем ScrollViewSuite. Он содержит приложение с именем TapToZoom, которое показывает правильную реализацию масштабирования пинча (работает в iOS5). По сути, мне просто нужно было сделать три вещи: 1 - определить константу в начале файла .m контроллера представления (сразу после #import):

#define ZOOM_VIEW_TAG 100

2 - Затем я добавил строку в начале viewDidLoad (или loadView, если вы не используете nib-файл и создаете свой вид с помощью кодирования - как в примере Apple), который устанавливает тег в вашем tableView ( таблица, встроенная в scrollView):

[tableView setTag:ZOOM_VIEW_TAG];

3- Затем, наконец, измените значение, возвращаемое в viewForZoomingInScrollView, с предыдущего «return tableView» на:

return [scrollView viewWithTag:ZOOM_VIEW_TAG];

Как только эти три элемента были на месте, мое масштабирование не только снова заработало, но я понимаю, что теперь оно гораздо более плавное, чем раньше - это означает, что моя предыдущая реализация уже имела недостатки в iOS4.

Я считаю, что если вы будете следовать этим указаниям, ваша проблема должна быть решена. Пожалуйста, скажите мне, если нет. (технически вы можете установить тег вашего tableView в интерфейсном окне, затем избавиться от шагов один и два и просто дать номер тега, который вы определили на шаге 3, но в долгосрочной перспективе код будет менее читабельным - по крайней мере, на мой взгляд)

0 голосов
/ 13 декабря 2011

Та же ошибка для меня, и решением было просто вернуть self.view вместо myScrollView

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
        return self.view;;
 }

Надеюсь, это поможет.

0 голосов
/ 15 октября 2011

Сообщение об ошибке действительно полезно.Мое приложение, которое работало нормально на iOS4, также начало выдавать эту ошибку на iOS 5. Я решил проблему, добавив подпредставление к моему scrollview (в вашем случае tableView), а затем вернул это подпредставление в делегате.

dummyView = [[UIView alloc] initWithFrame:tableView.bounds];
[tableView addSubview:dummyView];

...

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return dummyView;
}
...