iOS 7 UITableView didSelectRowAtIndexPath pushViewController программно, проблема с анимацией

EDIT: Я нашел ответ на свой вопрос. Посмотрите на нижнюю часть моего сообщения.

У меня возникла проблема с анимацией, которая пытается программно UIViewController в didSelectRowAtIndexPath на UITableView . Когда я запускаю этот код в iOS 6, он отлично работает. В iOS 7 анимация перепуталась (она анимирует слева около 20% экрана, а затем исчезает). Если я сделаю это в раскадровке, анимация прекрасна. Я что-то упустил или есть способ обойти это без использования раскадровки?

 // This is a cut down example. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *viewController = [[UIViewController alloc] init]; [self.navigationController pushViewController:viewController animated:YES]; } 

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

введите описание изображения здесь

EDIT: Это все, что я пропустил. По какой-то причине вам нужно установить backgroundColor.

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *viewController = [[UIViewController alloc] init]; [viewController.view setBackgroundColor:[UIColor orangeColor]]; [self.navigationController pushViewController:viewController animated:YES]; } 

Это поведение по умолчанию «параллакс», вызванное методом pushViewController:animated: в iOS7.

Имея небольшой опыт работы с storyboards я подозреваю, что их segue s отличается от анимации push / pop UINavigationController .

Вы можете переопределить push / pop по умолчанию, создав настраиваемые анимированные или пользовательские интерактивные переходы.

Или вы можете использовать метод UIViewController :

 transitionFromViewController:toViewController:duration:options:animations:completion: 

для настройки этого поведения. Надеюсь, это поможет и надеюсь, что я понял ваш вопрос …

У меня были аналогичные проблемы, которые мне удалось исправить, задерживая вызов

 [self performSelector:@selector(displayMyViewController) withObject:nil afterDelay:0.2f]; 

Я тоже испытал эту проблему. Еще одна причина для этого – изменить альфа-версию представления. По крайней мере, это то, что я сделал.

Если вы хотите изменить непрозрачность представления при отображении загружаемого HUD или чего-то еще, не изменяйте альфа-представление. Вместо этого отрегулируйте альфа вида Table View или Collection или все, что у вас есть в этом представлении. Если у вас есть несколько элементов, поместите их все в представление и измените альфа-версию этого представления.

Другая причина также была бы цвета фона, как указано выше. Вам необходимо установить цвет фона в представлении назначения. Я столкнулся с этим несколько раз.

  • В раскадровке, как создать пользовательскую ячейку для использования с несколькими контроллерами?
  • UITableViewCell подвижная анимация
  • как настроить высоту ячейки при загрузке из пользовательских классов ячеек таблицы?
  • Разделение источника данных на другой класс в Swift
  • UITableViewCell Скользящее моделирование в быстром
  • Динамический UITableView в UIScrollView с автоматической компоновкой
  • Как предотвратить нежелательные анимации в UITableViewCell при анимации UITableView
  • Проблема с прокруткой UICollectionView
  • Multi select не работает должным образом в IOS
  • Отключение UIActionSheet дает EXC_BAD_ACCESS
  • Маска всех представлений ниже UIView, кроме фона
  • Давайте будем гением компьютера.