Direita para Esquerda e Direção do Layout
Ofereça suporte a idiomas RTL e layouts espelhados.
Direita para Esquerda e Direção do Layout é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
Idiomas escritos da direita para a esquerda
Árabe, hebraico, persa e urdu são escritos da direita para a esquerda (RTL). Para essas pessoas, toda a interface deve ser espelhada: os botões de voltar da navegação apontam para a direita, as listas se alinham à borda direita e o progresso flui da direita para a esquerda. Oferecer suporte a RTL é uma parte essencial da internacionalização.
// RTL locales include: ar, he, fa, ur
// The whole UI mirrors, not just the text.Inicial e final, não esquerda e direita
A regra de ouro é: projete usando inicial e final, em vez de esquerda e direita. O início da leitura é o lado inicial — à esquerda em inglês e à direita em árabe. Ao usar inicial e final, o sistema espelha seu layout automaticamente em RTL.
// SwiftUI uses leading/trailing automatically:
// HStack { Image(...); Text("Title") }
// .padding(.leading, 16) // flips in RTL
let edge = "leading mirrors automatically"
_ = edgeLendo layoutDirection
O SwiftUI expõe a direção atual por meio do valor de ambiente layoutDirection, que pode ser .leftToRight ou .rightToLeft. Leia esse valor quando precisar de uma lógica dependente da direção, como ao escolher um recurso chevron.
// In a SwiftUI View:
// @Environment(\.layoutDirection) var direction
// let chevron = direction == .rightToLeft
// ? "chevron.left" : "chevron.right"
let ltr = "leftToRight"
let rtl = "rightToLeft"
print(ltr, rtl)Espelhando símbolos SF e imagens
Muitos símbolos SF são espelhados automaticamente. Para imagens personalizadas direcionais, marque-as para que sejam invertidas conforme a direção do layout; assim, uma seta que aponta para a frente continuará apontando para a frente em RTL. O modificador flipsForRightToLeftLayoutDirection controla esse comportamento.
// SwiftUI:
// Image("forwardArrow")
// .flipsForRightToLeftLayoutDirection(true)
let shouldFlip = true
_ = shouldFlipForçando uma direção
Às vezes, uma subvisualização precisa manter uma direção fixa — por exemplo, um número de telefone ou um trecho de código da esquerda para a direita dentro de um layout RTL. Substitua a direção usando o modificador environment(\.layoutDirection, _) apenas nessa subárvore.
// Keep a code block LTR even in an RTL app:
// CodeView(snippet)
// .environment(\.layoutDirection, .leftToRight)
let forced = "leftToRight subtree"
_ = forcedAlinhamento de texto e multilineTextAlignment
Use .leading e .trailing também para o alinhamento do texto. Um parágrafo alinhado com .leading encosta automaticamente na borda direita em árabe. Evite .left/.right, pois eles nunca são invertidos.
// Text(longBody)
// .multilineTextAlignment(.leading) // flips in RTL
let alignment = "leading flips, left does not"
_ = alignmentTexto bidirecional
Parágrafos RTL frequentemente incorporam trechos LTR, como URLs, números e nomes de marcas em inglês. O Algoritmo Bidirecional do Unicode trata a ordenação, mas você pode envolver trechos ambíguos com caracteres de isolamento direcional para evitar que sejam embaralhados visualmente.
import Foundation
// First-strong isolate keeps an embedded run intact
let isolated = "\u{2068}example.com\u{2069}"
print(isolated.count > 0)Conteúdo semântico para visualizações que não devem ser espelhadas
Alguns controles — botões de reprodução de mídia e linhas do tempo — NÃO devem ser espelhados, pois seu significado é físico, não baseado na leitura. O semanticContentAttribute do UIKit — .playback, .spatial e .forceLeftToRight — informa ao sistema quando deve manter uma direção fixa.
// UIKit example:
// playbackBar.semanticContentAttribute = .playback
// mapOverlay.semanticContentAttribute = .spatial
let keepFixed = "playback / spatial do not mirror"
_ = keepFixedTestando RTL sem traduzir
Você não precisa de uma tradução para o árabe para testar o espelhamento. Execute o aplicativo com o pseudoidioma da direita para a esquerda na configuração de idioma do aplicativo no esquema. A interface será espelhada usando os textos existentes, permitindo identificar instantaneamente erros causados por .left/.right codificados diretamente.
// Edit Scheme > Run > Options >
// App Language: Right-to-Left Pseudolanguage
let test = "mirror without real translations"
_ = testErros comuns de RTL
Fique atento a estes problemas:
- Alinhamento ou preenchimento
.left/.rightcodificado diretamente. - Visualizações posicionadas manualmente usando deslocamentos x fixos.
- Imagens direcionais personalizadas que não são invertidas.
- Chevrons de voltar ou controles deslizantes apontando para o lado errado.
- Textos bidirecionais concatenados que ficam embaralhados.
// Replace fixed offsets with leading/trailing layout
// so AutoLayout / SwiftUI can mirror them.
let rule = "prefer leading/trailing everywhere"
_ = ruleUma linha preparada para RTL
Uma linha bem construída usa inicial e final em toda parte, permite que os símbolos sejam invertidos e força a direção apenas quando a semântica exige isso. Essa visualização não precisa de nenhuma alteração para ter a aparência correta em inglês e árabe.
// HStack {
// Image(systemName: "star")
// Text("Favorite")
// Spacer()
// Image(systemName: "chevron.forward") // mirrors
// }
// .padding(.horizontal, 16)
let ready = "row mirrors automatically"
_ = readyVerificação rápida
Relembre o princípio central de um layout seguro para RTL.
Recapitulação
Você aprendeu a oferecer suporte a idiomas escritos da direita para a esquerda:
- Projete usando inicial/final, nunca esquerda/direita.
- Leia o ambiente
layoutDirectionpara obter a lógica dependente da direção. - Inverta imagens direcionais; substitua a direção em subárvores fixas, como trechos de código ou números de telefone.
- Use
semanticContentAttributepara controles de reprodução/espaciais que não devem ser espelhados. - Teste com o pseudoidioma RTL antes de publicar.
Aprenda Swift com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 122
- Aulas
- 409
Perguntas Frequentes
A aula “Direita para Esquerda e Direção do Layout” é grátis?
Sim — o texto completo de “Direita para Esquerda e Direção do Layout” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Direita para Esquerda e Direção do Layout”?
Ofereça suporte a idiomas RTL e layouts espelhados. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Direita para Esquerda e Direção do Layout”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Catálogos de Strings e Strings Localizadas
- Pluralização e Stringsdict
- Formatação Sensível à Localidade
- Direita para Esquerda e Direção do Layout