Я создал следующую структуру
private struct Notification: View {
let notification: NotificationModel
let onClick: () -> Void
init(
notification: NotificationModel,
onClick: @escaping () -> Void
) {
self.notification = notification
self.onClick = onClick
}
var body: some View {
VStack(alignment: .leading) {
Text(notification.title)
HStack {
Text(notification.body)
if !notification.isRead {
Spacer()
Circle().frame(width: 6, height: 6)
}
}
}
.frame(maxWidth: .infinity)
.onTapGesture(count: 1, perform: onClick)
}
}
и использовал его вот так
NavigationView {
List {
ForEach(model.notifications) { notification in
Notification(
notification: notification,
onClick: { ... }
)
.listRowSeparator(.hidden)
}
}
.listStyle(.plain)
.navigationTitle("screen_notifications_title")
}
Все выглядит нормально, кроме этого
Как вы можете видеть, пространство между заголовком и телом различается между уведомлением о прочтении и непрочитанным уведомлением. Я думаю, проблема может быть связана с Circle(), но мне не удалось это исправить. Как мне это сделать?
@sonle, теперь должно быть лучше. Можете ли вы проверить мой вопрос еще раз?





В представлении Notification попробуйте использовать spacing, например:
VStack(alignment: .leading, spacing: 10) { // <-- here, adjust
Text(notification.title).font(.title3)
HStack {
Text(notification.body)
.font(.subheadline)
.lineLimit(bodyLineLimit)
if !notification.isRead {
Spacer()
Circle()
.frame(width: 6, height: 6)
.foregroundColor(.red)
}
}
}
чтобы отрегулировать пространство между Text(notification.title).font(.title3) и HStack.
Обратите внимание: NavigationView устарел, вам следует использовать NavigationStack.
Попробуй это:
HStack {
Text(notification.body)
.font(.subheadline)
.lineLimit(bodyLineLimit)
}
.overlay(
Circle()
.frame(width: 6, height: 6)
.foregroundColor(notification.isRead ? .clear : .red)
.offset(x: 8, y: 0),
alignment: .trailing
)
или просто используйте:
.foregroundColor(notification.isRead ? .clear : .red)
вместо if !notification.isRead
и настроить его самостоятельно
Пожалуйста, предоставьте больше информации и создайте минимальный пример. Что здесь еще
Notification? Как структура может рекурсивно содержать себя?