Estou tentando recriar o aplicativo de mensagens da Apple. Percebi que o símbolo na seleção de bate-papo está na parte superior e não no centro, como o NavigationLink mostra por padrão.
Aqui está uma imagem do Apple Messages:
Aqui está uma imagem da minha aplicação:
import SwiftUI
struct ContentView: View {
private var imageSize: CGFloat = 50
var body: some View {
NavigationStack {
List(NavigationScreens.allCases, id: \.self) { screen in
NavigationLink(value: screen) {
Label(title: {
MessageChat(name: "SwiftUI")
.padding(.leading, 15)
//.border(.red)
}, icon: {
HStack {
Image(systemName: "circle.fill")
.resizable()
.frame(width: 10, height: 10)
Image("image_test")
.resizable()
.frame(width: imageSize, height: imageSize)
.clipShape(Circle())
}
.padding(10)
})
}
}
.navigationTitle("Messages")
.listStyle(.plain)
.scrollContentBackground(.hidden)
.navigationDestination(for: NavigationScreens.self) { screen in
switch screen {
case .Chat, .Profile, .Settings:
ChatSelection()
}
}
}
}
}
Não tenho certeza se essa é a maneira correta de fazer isso ou se um NavigationLink personalizado seria necessário.
Código de bate-papo da mensagem:
struct MessageChat: View {
@State var contact: Contact
var body: some View {
HStack {
VStack(alignment: .leading, spacing: 4) {
HStack {
// MARK: Name
Text(contact.name)
.font(.headline)
.lineLimit(1)
.foregroundStyle(Color.primary)
Spacer()
// MARK: Message Date
Text("12/12/12")
.font(.subheadline)
.foregroundStyle(Color.gray)
}
.padding(.trailing, 20)
// MARK: Message Description
Text("Some random text long enough to have the multiple lines effect, just in case its not long enough")
.lineLimit(2)
.font(.subheadline)
.foregroundStyle(Color.secondary)
.frame(maxHeight: 40, alignment: .topLeading)
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}