Tocropviewcontroller: Dispensando problemas de transição (iOS 13)

Criado em 8 ago. 2019  ·  23Comentários  ·  Fonte: TimOliver/TOCropViewController

Encontrei um problema ao apresentar o controlador de cultura em um controlador de navegação.

Ao dispensar o controlador de corte, ao final da transição a visualização do controlador de navegação é removida e não exibida ... (acontece no iPhone e iPad e apenas no iOS 13).

sem falar que a navegação ainda está lá e a IU está "travada".

bug

Comentários muito úteis

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Este método funciona bem no iOS 13.
Não sei por quê.

Espero que você encontre uma maneira melhor.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Todos 23 comentários

@uchiaTziki Um. Você pode ter que me mostrar, desculpe! Você pode anexar uma captura de tela?

capturas de tela anexadas ...

  1. apresentando modal com seletor de imagem.
  2. imagem escolhida
  3. presente controlador de safra daquela célula
  4. após o cancelamento, o cancelamento faz com que o seletor de imagens desapareça (e você está vendo o controlador de apresentação inicial - pintei o controlador de branco)

Espero que isso deixe as coisas mais claras ..
1
2
3
4

Hmm, então você está apresentando dentro de outro controlador de visualização sendo apresentado?

Eu me pergunto se este código de dispensa está acabando dispensando o controlador de visualização errado:

https://github.com/TimOliver/TOCropViewController/blob/8770be8407540f5873fe714870771cea8a382ac7/Objective-C/TOCropViewController/TOCropViewController.m#L895

Você pode tentar alterar o código lá e ver se consegue encontrar uma combinação que corrige isso?

Sem ser capaz de testar sozinho, não há nada que eu possa fazer do meu lado. Desculpa!

Já tentei de quase tudo, mas vou tentar de novo ..
O controlador na parte de trás não está sendo dispensado .. sua visão está sendo removida (o que é estranho).

Você tentou esses códigos antes de apresentar o cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Tentei esta manhã. Isso resolve o bug, mas a animação é a animação modal padrão (de baixo para cima).
A animação especial da vista / quadro não funciona com esta solução

@uchiaTziki você encontrou alguma correção?

Isso é reproduzível no aplicativo de amostra? Em caso afirmativo, posso potencialmente dar uma olhada nele.

A forma como as apresentações modais funcionam no iOS 13 mudou em relação às versões anteriores do iOS. Mas ainda não tive uma boa chance de descobrir exatamente o que precisamos fazer para atualizar o código para isso.

Pelo que posso ver, não está funcionando corretamente quando você tem o seguinte:

  • Controlador de navegação (A) aciona um Controlador de visualização (B)
  • View Controller (B) apresenta View Controller (C) como folha de formulário
  • View Controller (C) apresenta CropViewController
  • Toque em Cancelar ou Concluído em CropViewController e você poderá identificar o bug.

Desculpe, eu estava de férias.

Você tentou esses códigos antes de apresentar o cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Usar isso ( @TimOliver ) no último Xcode beta

Isso funcionou para mim também.

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Este método funciona bem no iOS 13.
Não sei por quê.

Espero que você encontre uma maneira melhor.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Olá, conheci o bug no iOS 13.1

se eu usar
dismiss(animated: true, completion: nil)
no iOS 13.1,

Todos os ViewController desaparecem.

crop

Não sei por quê.

Eu só tive que definir cropViewController.modalTransitionStyle = .coverVertical como uma solução alternativa, já que ele não usa mais a transição personalizada ...

A mesma coisa que @oblq aqui.

Você tentou esses códigos antes de apresentar o cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Resolvi meu problema, obrigado

se # disponível (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Obrigado. Isso corrigiu meu problema no iOS 13

após o corte da imagem, dispensando o controlador de corte, no final da transição a visualização do controlador de navegação está sendo removida e não exibida

por favor, me ajude

após o corte da imagem, dispensando o controlador de corte, no final da transição a visualização do controlador de navegação está sendo removida e não exibida

por favor, me ajude

Oi! Basta definir cropViewController.dismiss(animated: **false**, completion: nil) vez de cropViewController.dismiss(animated: **true**, completion: nil)

Também venho tentando resolver esse problema. Como @ ibdman1991 diz, desativar a animação funciona, mas parece ruim. Acho que remover transitioningDelegate poderia ser uma solução mais agradável, mas não tenho certeza de quão impactante seria.

    let cropViewController = CropViewController(image: image)
    cropViewController.modalTransitionStyle = .crossDissolve
    cropViewController.transitioningDelegate = nil

se # disponível (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Este problema foi resolvido no iOS 13 e superior. Obrigado

se # disponível (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
// cropViewController.modalTransitionStyle = .crossDissolve
cropViewController.transitioningDelegate = nulo
}
Trabalhando para mim

Uhh. OK. Já que definir explicitamente o estilo de apresentação para tela inteira pareceu corrigir isso para a maioria das pessoas, estou encerrando isso. :)

Se você tiver um caso de uso específico que requer um estilo de apresentação modal explicitamente diferente, abra um novo problema e explique com muito cuidado o que você está tentando fazer. Lembre-se de que, se for um bug no iOS 13, pode não haver muito que possamos fazer aqui.

Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações