Подтвердить что ты не робот

IOS 8 UIPageViewController Применение ограничений после переходов

Мое приложение имеет многоуровневое представление в стиле учебника, которое пользователи просматривают, чтобы узнать о приложении. Это реализовано так же, как описанное в этом уроке. Внедрив его как для iOS 7, так и для 8, я сравниваю, как они работают, и обнаружил проблемы с последними - здесь я запускаю Xcode 6 GM.

Кажется, что UIPageViewController передает представления после завершения перехода. Я перепробовал методы делегата, чтобы узнать, что происходит:

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
   NSLog(@"Frame size before: %@", NSStringFromCGRect([(UIViewController*)pendingViewControllers[0] view].frame));
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
   NSLog(@"Frame size after: %@", NSStringFromCGRect([(UIViewController*)previousViewControllers[0] view].frame));
}

И вот пример вывода:

Frame size before: {{0, 0}, {600, 600}}
Frame size after: {{0, 0}, {320, 568}}

Это проявляется так: проведите по экрану влево, чтобы вытащить следующий вид, и обратите внимание на 32-pt-белое пространство внизу нового представления. Как только переход завершен, он врывается в правильную компоновку.

Возможно, это ошибка в iOS 8? В данный момент я все догадываюсь.

4b9b3361

Ответ 1

Я понял, что вам нужно основывать свои ограничения на представлении, а не на макете вашего контроллера. Это обеспечит, чтобы ваш контроллер просмотра соблюдал ограничения, установленные вами перед переходом в PageViewController.

вы можете сделать это так:

Constraints example

Не забудьте снять флажок "Ограничить на поля"

Ответ 2

Для всех, у кого есть эта проблема, для меня оказалось, что я выкладываю взгляды "относительно поля" (новая функция в iOS 8).

Вместо:

enter image description here

Использование:

enter image description here

Ответ 3

Я боролся с этим в течение нескольких дней.

Я попытался реализовать его, создав экземпляр ViewController страницы из раскадровки. Произошло определенное изменение размера. Проверка размера кадра в

  • pageViewController: viewControllerAfterViewController
  • pageViewController: willTransitionToViewControllers
  • pageViewController: didFinishAnimating: previousViewControllers

Размер кадра всегда будет меняться между вызовами 1 и 3. Иногда до 2, а иногда и после.

Если вы также используете раскадровки, я смог решить проблему, извлекая элементы пользовательского интерфейса страницы в свой собственный файл XIB, установив ограничения в IB, а затем создав страницы с вызовом initWithNibName.

Не полный ответ, но он вернул мне чувство продуктивности. Надеюсь, что это поможет.

Ответ 4

Для меня решение заключалось в том, чтобы вывести вершину таблицыView для просмотра: Редактор → Pin → Top Space To SuperView (iOS8)

Ответ 5

Это ошибка в iOS 8, но я нашел обходное решение:

Добавить пустой вид поверх строки состояния в вашей раскадровке. Высота представления должна быть такой же, как и y-значение перемещаемого объекта.

Image of correct constraints