Tocropviewcontroller: O safeAreaInsets está incorreto?

Criado em 25 set. 2019  ·  14Comentários  ·  Fonte: TimOliver/TOCropViewController

Obrigado pela biblioteca incrível! 👍

O que você está tentando alcançar exatamente com esta biblioteca?
Eu só tenho uma pergunta. A posição da barra de ferramentas muito perto da parte inferior:

Tem um safeAreaInsets.bottom incorreto?

Precisa de um projeto de exemplo reproduzível? TestSafeArea.zip

bug rfc

Comentários muito úteis

Olá @ zhangao0086! Desculpe pelo atraso!

Finalmente consegui algum tempo livre para examinar o que estava acontecendo. Foi estranho porque mesmo no nível do contêiner pai, safeAreaInsets eram 0, exceto pelo entalhe.

Eu acho que consertei. Este foi outro efeito colateral do novo display modal iOS 13. Acontece que se você não definir modalPresentationStyle para .fullScreen , o controlador de visualização não parece obedecer aos insets.

Ainda não enviei um novo lançamento de pod (Meu servidor de CI caiu quando o atualizei para Catalina. 😅), mas adicionei o sinalizador .fullScreen ao branch master. Você pode tentar puxar do mestre e ver se funciona para você agora?

A sintaxe para extrair do mestre por meio do CocoaPods é:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

Obrigado!

Todos 14 comentários

@ zhangao0086 mesmo problema aqui no iOS13, também quando você toca em Cancelar o aplicativo trava .. alguma atualização sobre isso?

ping ...

Olá!
O motivo está em uma transição VC personalizada de CropViewController. Para corrigir esse problema, temos que fazer algumas pesquisas sobre as diferenças no iOS13 relacionadas à transição ou .... basta desabilitá-lo :)
arquivo: CropViewController.swift, string: 561.

fileprivate func setUpCropController() {
        addChild(toCropViewController)
        transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)
        toCropViewController.delegate = self
        toCropViewController.didMove(toParent: self)
    }

Para usar uma transição padrão, podemos comentar / remover esta linha:

transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)

Não acho que esse problema seja apenas uma questão de transição personalizada. Eu apresento o controlador empurrando-o de um UIImagePickerController em um popover. O popover no iOS 13 inclui a seta na visualização, então este controlador agora pensa que é maior do que é e ocupa o espaço extra para a seta. Portanto, se a seta estiver no lado direito, o conteúdo deste controlador vazará da tela no lado direito etc. Algo precisa ser modificado com a área segura, mas não tenho certeza do que resolveria isso - especialmente porque tudo é feito programaticamente e há vários pontos de vista envolvidos.

Eu acredito que o safeAreaLayoutGuide precisa ser usado de alguma forma, em algum lugar para consertar isso. Acabei de ler o código e parece que não está incluído em nenhum lugar. Gostaria de poder ajudar mais. Aqui estão mais alguns lugares onde as pessoas estão tendo esse problema, que também incluem algumas maneiras de abordá-lo:

https://stackoverflow.com/questions/57988889/ios-13-uipopoverpresentationcontroller-sourceview-content-visible-in-the-arrow

https://stackoverflow.com/questions/57866771/ios-problem-of-display-the-popover-border-in-the-ios13

Além disso, se isso foi corrigido no código atual, posso não estar vendo isso porque estou usando Cartago, embora eu tenha acabado de verificar e não haja atualizações

alguma atualização disso? @TimOliver

Olá @ zhangao0086. Muito obrigado pelo aplicativo de amostra abrangente!

Estou ocupado apagando incêndios no iOS 13 em alguns de meus outros projetos agora, então ainda não tive a chance de dar uma olhada nisso. Desculpa!

Vou averiguar quando puder. Nesse ínterim, se alguém encontrar a solução e puder enviar um PR, agradecemos muito!

Originalmente, fiz CropViewController um controlador de visão separada, uma vez que não era possível converter toda a interface Objective-C de TOCropViewController para Swift naquele momento. Mas acho que a interoperabilidade melhorou a ponto de podermos potencialmente livrar-nos do invólucro agora. Espero que isso evite problemas como esse no futuro.

@TimOliver Obrigado pela sua resposta! Eu te entendo totalmente😃

Olá @ zhangao0086! Desculpe pelo atraso!

Finalmente consegui algum tempo livre para examinar o que estava acontecendo. Foi estranho porque mesmo no nível do contêiner pai, safeAreaInsets eram 0, exceto pelo entalhe.

Eu acho que consertei. Este foi outro efeito colateral do novo display modal iOS 13. Acontece que se você não definir modalPresentationStyle para .fullScreen , o controlador de visualização não parece obedecer aos insets.

Ainda não enviei um novo lançamento de pod (Meu servidor de CI caiu quando o atualizei para Catalina. 😅), mas adicionei o sinalizador .fullScreen ao branch master. Você pode tentar puxar do mestre e ver se funciona para você agora?

A sintaxe para extrair do mestre por meio do CocoaPods é:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

Obrigado!

@TimOliver Muito obrigado pelo seu excelente trabalho!

Maravilhoso! Está funcionando exatamente como eu esperava! 👍

Eu também tive que definir cropViewController.modalPresentationStyle = .fullScreen no meu código (não apenas atualizar para o branch master). Adicionar uma nota aqui, pois não estava claro para mim

Esta correção parece funcionar apenas para código Swift. Alguém sabe por que não está funcionando no objetivo C?

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