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];
}
Это похоже на то, что перед экраном TableView исчезает. Я понимаю, почему он это делает. Это связано с тем, что новый взгляд нажимается, когда он приближается к нему, как при использовании раскадровки. По какой-то причине он не работает программно.
![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];
}
Ответы
Ответ 1
Это поведение по умолчанию "параллакс", вызванное методом pushViewController:animated:
в iOS7.
Имея небольшой опыт работы с storyboards
, я подозреваю, что их segue
отличаются от анимации push/pop UINavigationController
.
Вы можете переопределить push/pop по умолчанию, создав пользовательский animated или пользовательский interactive.
Или вы можете использовать метод UIViewController
:
transitionFromViewController:toViewController:duration:options:animations:completion:
чтобы настроить это поведение. Надеюсь, это поможет и надеюсь, что я понял ваш вопрос...
Ответ 2
У меня были аналогичные проблемы, которые мне удалось исправить, задерживая вызов
[self performSelector:@selector(displayMyViewController) withObject:nil afterDelay:0.2f];
Ответ 3
Я тоже испытал эту проблему. Другая причина для этого - изменение альфа-адреса назначения. По крайней мере, то, что я сделал.
Если вы хотите изменить непрозрачность представления, когда вы показываете загрузку HUD или что-то еще, не изменяйте представление alpha.
Вместо этого отрегулируйте альфа вида Table View или Collection или все, что у вас есть в этом представлении. Если у вас есть несколько элементов, поместите их все в представление и измените этот вид alpha.
Другой причиной может быть и цвет фона, как указано выше. Вам необходимо установить цвет фона в представлении назначения. Я столкнулся с этим несколько раз.