2013-10-08 4 views
11

EDIT: Я нашел ответ на свой вопрос. Посмотрите на нижнюю часть моего сообщения.iOS 7 UITableView didSelectRowAtIndexPath pushViewController программно, проблема с анимацией

У меня возникла проблема с анимацией, которая пыталась проталкивать 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]; 
} 

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

enter image description here

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]; 
} 
+0

Вы пробовали просто поместить его в блок анимации UIView, а затем настроить анимацию NO как работу? – AdamG

+0

Является ли частью проблемы, что вы не видите, что 'viewController' нажат на стек? или проблема только в том, что старый 'viewController' только перемещается налево примерно на 20%? –

+0

Появляется My ViewController. Это анимация работает неправильно. – Jaybit

ответ

2

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

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

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

Или вы могли бы использовать UIViewControllermethod:

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

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

+0

Да, вы поняли мой вопрос, но я верю: transitionFromViewController: toViewController: duration: options: animations: completion: не работает для UINavigation pushViewController. – Jaybit

+0

Да, вы правы, я должен был упомянуть об этом. Я хотел бы отметить, что этот метод является возможностью, если вы хотите пройти маршрут UIViewController сдерживания ... –

0

Я был иметь схожие проблемы, с которыми мне удалось зафиксировать с помощью задержки вызова

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

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

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

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

Смежные вопросы