O tipo dinâmico é bom, mas nem sempre funciona. Agora, mostrarei como os controles pequenos no iOS 13 aumentam de graça, sem registro e SMS.
Em um
artigo anterior, selecionamos o tipo de dinâmica no menu do aplicativo iOS do Dodo Pizza. Acabou muito bem. Mas a barra de guias no menu era tão pequena quanto era - não muda dependendo da configuração do tamanho do texto.
Esse recurso ainda não chegou ao lançamento, pelo qual tenho vergonha e vergonha"Mas como está, Dodo?" Você não se importa com pessoas com deficiência visual?
Desculpe!
Um pouco sobre o modo embutido "Lupa"
A barra de guias do sistema mostra uma visualização de cada guia com um toque longo. Tente incluir o tamanho do texto "disponível" e pressione e segure em qualquer guia na guia do sistema (por exemplo, em Música ou Foto). O seguinte pop-up aparecerá na tela:
Além da barra de guias, o modo "lupa" é suportado por botões nas barras de navegação e barras de ferramentas:
Campos de pesquisa:
E mais alguns controles.
E, começando no iOS 13, podemos adicionar facilmente o mesmo comportamento aos nossos controles.
Como prender UILargeContentViewerItem ao aplicativo
Infelizmente, esse protocolo é pouco descrito na documentação, mas isso não importa, porque sua API parece bastante simples:
@available(iOS 13.0, *) public protocol UILargeContentViewerItem : NSObjectProtocol { var showsLargeContentViewer: Bool { get } var largeContentTitle: String? { get } var largeContentImage: UIImage? { get } var scalesLargeContentImage: Bool { get } var largeContentImageInsets: UIEdgeInsets { get } }
É suficiente implementar vários desses métodos, cujos nomes falam por si, e seu controle mostrará uma visualização grande em um toque longo.
Implementação muito simples
Vamos tentar este protocolo em algum botão no aplicativo. Por exemplo, no botão
i
no cartão do produto:
Adicione 3 linhas de código:
nutritionButton.showsLargeContentViewer = true nutritionButton.addInteraction(UILargeContentViewerInteraction()) nutritionButton.largeContentTitle = nutritionButton.accessibilityValue
Feito. Legal, né?
Só aqui é o ícone par, que é puxado por padrão, eu não gosto. Será melhor se não for de duas cores, mas de uma cor com a forma recortada da letra
i
. Isso é usado apenas para o estado do botão .highlighted.
nutritionButton.largeContentImage = nutritionButton.image(for: .highlighted)
Norma
E agora vamos encerrar na extensão:
extension UIView { public func enableLargeContent(title: String? = nil, image: UIImage? = nil, scales: Bool = true, insets: UIEdgeInsets = .zero) { guard !showsLargeContentViewer else { return } showsLargeContentViewer = true addInteraction(UILargeContentViewerInteraction()) largeContentTitle = title largeContentImage = image scalesLargeContentImage = scales largeContentImageInsets = insets } }
nutritionButton.enableLargeContent(title: nutritionButton.accessibilityValue, image: nutritionButton.image(for: .highlighted))
De fato, muitos controles iOS padrão já implementam alguns dos métodos deste protocolo. E esse modo está desativado, porque você precisa realmente aumentar o conteúdo, em vez de esconder tudo atrás de uma lupa.
Reformulei: use esse recurso apenas como último recurso, quando você realmente não puder aumentar o controle.
A documentação para essa coisa toda está disponível no Xcode se você abrir a interface UILargeContentViewerItem
.
Projeto de demonstração no meu
repositório no GitHub