Atualizei recentemente meu Xcode para 11.4. Quando executo o aplicativo no dispositivo, notei que todos os títulos de meus itens de navegação ficaram totalmente pretos ao serem configurados no storyboard.
Você não pode mudar nem do código, a seguinte linha de código não funciona mais
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
Eu só faço funcionar usando alguns itens do iOS 13 UINavigationBarAppearance
@available(iOS 13.0, *)
private func setupNavigationBar() {
let app = UINavigationBarAppearance()
app.titleTextAttributes = [.foregroundColor: UIColor.white]
app.backgroundColor = Constants.Color.barColor
self.navigationController?.navigationBar.compactAppearance = app
self.navigationController?.navigationBar.standardAppearance = app
self.navigationController?.navigationBar.scrollEdgeAppearance = app
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
}
Alguém pode me explicar por que ??? Este é um bug crucial ou algum novo recurso oculto?
ios
swift
xcode
navigationbar
Tudor Popa
fonte
fonte
Respostas:
A Apple finalmente o corrigiu na versão 11.4.1
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
fonte
Isso foi corrigido para mim, usando UINavigationBarAppearance, em: Personalizando a barra de navegação do seu aplicativo
Nota: Subclassifiquei UINavigationController e isso foi chamado a partir da substituição de viewWillAppear .
... ou para AppDelegate , em todo o aplicativo:
... para AppDelegate, em todo o aplicativo, no Objective-C:
fonte
UINavigationBarAppearance()
e, sem motivo, no Xcode antigo, não precisamos depender dele, mas desde o Xcode 11.4 ele deve usarUINavigationBarAppearance()
ou a cor do título será sempre preta.appearance.largeTitleTextAttributes
para títulos grandes.No storyboard, para o seu Navigation Controller, altere o "Bar Tint" para o valor "Default" e, em seu código, você poderá alterá-lo como faria normalmente.
fonte
Não tenho certeza se é um bug ou não.
A maneira como corrigimos é configurando o "Estilo da barra de status" para conteúdo escuro ou claro na configuração do projeto. Isso forçará a cor do texto da barra de status de uma certa maneira, em vez de ser determinada com base nos dispositivos que estão no modo Claro ou Escuro.
Além disso, você precisa definir o valor "Visualizar aparência da barra de status com base no controlador" como "NÃO" no seu Info.plist. sem esse valor, o "estilo da barra de status" será substituído.
Em seguida, crie um controlador de navegação personalizado e implemente-o em seus storyboards.
* As cores estão definidas para que você possa vê-las claramente funcionando.
Eu achei que era melhor definir o código no ViewDidLoad, em vez do ViewDidAppear, porque minhas cores não estavam sendo definidas no carregamento inicial, somente depois de voltar e recarregar.
Também descobri que esse problema pode estar vinculado ao "Bar Tint" de um NavBar. quando estávamos tentando resolvê-lo, definimos o "Bar Tint" como padrão e isso parecia resolver o erro também. No entanto, ele fez com que não pudéssemos obter a cor de fundo do NavBar como desejávamos. Assim, em meus storyboards, certifiquei-me de definir esse valor como padrão apenas por uma boa medida.
Espero que ajude
fonte
não há necessidade da solução alternativa. é um erro no Xcode Interface Builder. Atualização de lançamento da Apple para o Xcode 11.4.1
das notas de versão do desenvolvedor da Apple
https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_1_release_notes
fonte
Semelhante à resposta de Stu Carney em 25/3, adicionei mais alguns detalhes de implementação.
Crie uma subclasse de UINavigationController . Adicione o seguinte a viewWillAppear:
Em seguida, substitua o preferidoStatusBarStyle :
Se você deseja atualizar a barra de navegação e a barra de status dinamicamente, como em um método IBAction ou seletor do UISwitch, adicione o seguinte:
Além disso, certifique-se de definir todas as suas barras de navegação e botões de barra para as cores padrão no IB. O Xcode parece ter um erro em que as cores do IB substituem as cores programadas.
fonte
No meu caso, após a atualização do Xcode de 11.3 para 11.4, esse bug ocorreu. Então eu tenho que mudar meu código para explodir, a fim de definir uma imagem como plano de fundo na barra de navegação.
fonte