Автоматическая компоновка, поворот экрана и анимация UIView

У меня проблема с UIView, которую я добавляю в нижнюю часть экрана и оживляю ее, чтобы заполнить большую часть экрана, если нажата кнопка. Представление будет анимировать вверх и вниз и вращаться по назначению. Если я пытаюсь анимировать в пейзаже, он ломается и дает мне сообщение об ошибке:

*** Assertion failure in -[UIScrollView _edgeExpressionInContainer:vertical:max:], /SourceCache/UIKit_Sim/UIKit-2380.17/NSLayoutConstraint_UIKitAdditions.m:2174 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Autolayout doesn't support crossing rotational bounds transforms with edge layout constraints, such as right, left, top, bottom. The offending view is: <UIView: 0x9199340; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = RM+BM; layer = <CALayer: 0x91993d0>>' 

Оскорбительный взгляд – self.view.

Как я создаю UIView:

 [self.myContentView addSubview:subBar.filterListView]; [self.myContentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[filterListView]|" options:0 metrics:nil views:@{@"filterListView": subBar.filterListView}]]; subBar.filterListView.bottomConstraint = [NSLayoutConstraint constraintWithItem:subBar.filterListView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.mapView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; subBar.filterListView.topConstraint = [NSLayoutConstraint constraintWithItem:subBar.filterListView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.mapView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; [self.myContentView addConstraint:subBar.filterListView.bottomConstraint]; [self.myContentView addConstraint:subBar.filterListView.topConstraint]; 

self.myContentView – это UIView, который обрабатывает все self.view:

 [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(contentView)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(contentView)]]; 

Чтобы анимировать subBar.filterListView, я удаляю верхний и нижний предел, переназначаю их, добавляю и анимируем:

 [self.myContentView removeConstraint:view.topConstraint]; [self.myContentView removeConstraint:view.bottomConstraint]; view.topConstraint = [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.topToolBar attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; view.bottomConstraint.constant -= SUB_BAR_SIZE.height; [self.myContentView addConstraint:view.topConstraint]; [self.myContentView addConstraint:view.bottomConstraint]; [self.myContentView setNeedsUpdateConstraints]; [UIView animateWithDuration:.25 animations:^{ [self.myContentView layoutIfNeeded]; }]; 

Является ли код запутанным сверху и снизу, когда он вращается? Думает ли он, что портретный портрет – это левый пейзаж?

3 Solutions collect form web for “Автоматическая компоновка, поворот экрана и анимация UIView”

Хорошо, я нашел решение. Это не устраняет вышеупомянутую проблему, а скорее находит другой способ приблизиться к ней.

Вместо этого я изменил свои ограничения на метод Visual Format Language (VFL):

 subBar.filterListView.verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[filtersSubBar][filterListView(0)]" options:0 metrics:nil views:@{@"filterListView": subBar.filterListView, @"filtersSubBar" : subBar.filtersSubBar}]; 

Я думаю, что проблема заключалась в использовании атрибутов NSLayoutAttributeTop , NSLayoutAttributeRight и т. NSLayoutAttributeTop , NSLayoutAttributeRight вызывали проблему.

Autolayout не смог обработать вращение и попытаться использовать NSLayoutAttributeTop когда он должен был быть изменен на NSLayoutAttributeRight чтобы выразить новую ориентацию. Полагаю, мы могли бы вручную изменить ограничение.

Кажется, VFL обрабатывает его по-разному и не использует атрибуты?

Это похоже на то, что это либо ошибка, либо просто недостаток iOS.

Для любого, кто приходит сюда из google: у меня было это исключение, вызывая контроллер PresentView в моем настраиваемом PushSegue:

 @implementation PushSegue - (void) perform { UIViewController* fromController = (UIViewController*) self.sourceViewController; UIViewController* toController = (UIViewController*) self.destinationViewController; CATransition* transition = [CATransition animation]; BOOL iPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad; transition.duration = iPad ? 0.5 : 0.3; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = kCATransitionPush; switch ([UIApplication sharedApplication].statusBarOrientation) { case UIInterfaceOrientationPortraitUpsideDown: transition.subtype = kCATransitionFromLeft; break; case UIInterfaceOrientationLandscapeLeft: transition.subtype = kCATransitionFromBottom; break; case UIInterfaceOrientationLandscapeRight: transition.subtype = kCATransitionFromTop; break; default: transition.subtype = kCATransitionFromRight; break; } [fromController.view.window.layer addAnimation:transition forKey:nil]; [fromController presentViewController:toController animated:NO completion:nil]; } @end 

Причина в том, что для некоторого недоразумения у меня было это в моем коде:

 [self.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

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

Вы правы, автоматический макет не работает с анимационными преобразованиями, которые влияют на прямоугольник выравнивания объекта пользовательского интерфейса.

  • AutoLayout устанавливает одинаковое высоту и верхнее пространство для нескольких видов, не распределяя их по вертикали
  • Поведение UICollectionViewFlowLayout не определено
  • Размер ячейки UICollectionView в AutoLayout
  • Автоматическое разворачивание пространства при удалении промежуточных представлений
  • iOS NSLayoutConstraint Фиксированная ширина с использованием constraintWithItem
  • Как написать оглавление содержимого с приоритетом собственного размера в формате визуального языка?
  • iOS auto layout: как динамически равномерно размещать предметы?
  • Настройка этого пользовательского интерфейса с помощью автоматической компоновки
  • Autolayout - растяжение представления для заполнения родительского представления
  • Не удалось сделать равную ширину для ячейки в iOS?
  • Autolayout UIScrollView ограничивает странное поведение
  • Interesting Posts

    Могут ли объекты вершинного массива (VAO) совместно использоваться в EAGLContexts в OpenGL ES?

    Размер шрифта на универсальной раскадровке

    Почему я получил ibtool с кодом выхода 255?

    Не удалось сохранить NSNumber в основных данных

    iPhone: обнаружение Tap в MKMapView

    iOS и Bluetooth

    Симулятор XCode не отображает последние изменения

    Представление UIImageJpg позволяет удвоить разрешение изображения

    Вход в Facebook через приложение с непроверенной учетной записью пользователя в FB

    Могу ли я обновить приложение iTunes с новым проектом, но тот же идентификатор пакета?

    Когда использовать супер при переопределении методов ios

    UIBarButtonItem Пользовательский вид в UINavigationBar

    Redlaser SDK противоречит SDK Scandit

    Azure Notification Hubs Отправляет уведомление конкретному устройству

    Как заставить UITableViewCell вместить весь TextView, независимо от размера текста?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.