Это любопытно.
У меня есть IBOutlet UIScrollView playScrollView
, высота которого точно равна 1/3 его высоты contentSize. Приложение в ландшафте. Я называю этот код ...
[playScrollView scrollRectToVisible:CGRectMake(0.0f, page * PLAY_VIEW_PAGE_HEIGHT,
480.0, PLAY_VIEW_PAGE_HEIGHT)
animated:animated];
... (int page
колеблется от 0 до 2), чтобы начать с page
1 (с отображением средней трети), затем подниматься или опускаться по мере необходимости, когда пользователь нажимает кнопки.
Это прекрасно работает на iOS4 как на устройстве, так и на симуляторе, и уже несколько месяцев без проблем работает в магазине приложений. Даже устройства iOS5 в порядке с существующими сборками, только когда приложение было перекомпилировано для iOS5, оно перестало корректно работать на устройствах iOS5.
Начиная с обновления до XCode 4.2, это не работает для iOS5. Это на один page
слишком низко, показывая нижнюю страницу, когда она должна показывать середину. Я могу заставить код работать на iOS5 (устройство и симулятор), изменив page
на (page-1)
...
[playScrollView scrollRectToVisible:CGRectMake(0.0f, (page-1) * PLAY_VIEW_PAGE_HEIGHT,
480.0, PLAY_VIEW_PAGE_HEIGHT)
animated:animated];
... но, конечно, это нарушает iOS4, который прекрасно работает со старым кодом, но застревает на один page
слишком высокий с этим новым кодом. iOS4 и iOS5 ровно PLAY_VIEW_PAGE_HEIGHT
вне шага (288 пикселей, треть высоты playScrollView
). То же самое происходит, если я использую setContentOffset:
вместо.
Еще одна любопытная вещь, вероятно, ключ к этому. Если я вообще не использую scrollRectToVisible, то iOS4 находится в верхней части playScrollView, тогда как iOS5 показывает среднюю треть (т.е. PLAY_VIEW_PAGE_HEIGHT пикселей вниз).
Я мог бы обнаруживать iOS и использовать разные коды для каждого, но это ужасная ошибка. Если это ошибка iOS5, и они исправят ее в будущем выпуске, это сломает живое приложение.
У кого-нибудь есть идеи, или замечено что-нибудь подобное? Спасибо.