отступы между карточек
This commit is contained in:
parent
b0d5429ae6
commit
4ec99934e4
@ -17,25 +17,26 @@ struct NewHomeTab: View {
|
||||
ProgressView("Загрузка ленты...")
|
||||
} else {
|
||||
ScrollView {
|
||||
HStack(alignment: .top, spacing: 2) {
|
||||
LazyVStack(spacing: 8) {
|
||||
HStack(alignment: .top, spacing: 6) {
|
||||
LazyVStack(spacing: 6) {
|
||||
ForEach(column1Posts) { post in
|
||||
PostGridItem(post: post)
|
||||
}
|
||||
}
|
||||
LazyVStack(spacing: 8) {
|
||||
LazyVStack(spacing: 6) {
|
||||
ForEach(column2Posts) { post in
|
||||
PostGridItem(post: post)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 2)
|
||||
.padding(.horizontal, 4)
|
||||
}
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.fetchDataIfNeeded()
|
||||
}
|
||||
.background(Color(.secondarySystemBackground)) // Фон для всей вкладки
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,57 +44,55 @@ struct PostGridItem: View {
|
||||
let post: Post
|
||||
|
||||
private var randomHeight: CGFloat {
|
||||
// Мы можем сделать высоту зависимой от типа контента, если нужно
|
||||
// пока оставим случайной для визуального разнообразия
|
||||
CGFloat.random(in: 150...300)
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
VStack(alignment: .leading, spacing: 0) { // Убираем отступ между картинкой и текстом
|
||||
// 1. Медиа контент
|
||||
if let _ = post.media.first {
|
||||
Image("placeholderPhoto") // Используем локальный плейсхолдер
|
||||
Image("placeholderPhoto")
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(height: randomHeight)
|
||||
.clipped()
|
||||
.cornerRadius(10)
|
||||
}
|
||||
|
||||
// 2. Название поста
|
||||
if let title = post.title, !title.isEmpty {
|
||||
Text(title)
|
||||
.font(.headline)
|
||||
.lineLimit(2)
|
||||
}
|
||||
|
||||
// 3. Информация об авторе и лайки
|
||||
HStack {
|
||||
// Аватар и имя пользователя
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: "person.circle.fill")
|
||||
.resizable()
|
||||
.frame(width: 24, height: 24)
|
||||
.foregroundColor(.gray)
|
||||
Text(post.authorUsername)
|
||||
// Контейнер для текста, который создает эффект "расширения"
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
// 2. Название поста
|
||||
if let title = post.title, !title.isEmpty {
|
||||
Text(title)
|
||||
.font(.subheadline)
|
||||
.lineLimit(1)
|
||||
.lineLimit(2)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
// 3. Информация об авторе и лайки
|
||||
HStack {
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: "person.circle.fill")
|
||||
.resizable()
|
||||
.frame(width: 20, height: 20)
|
||||
.foregroundColor(.gray)
|
||||
Text(post.authorUsername)
|
||||
.font(.footnote)
|
||||
.lineLimit(1)
|
||||
}
|
||||
|
||||
// Лайки
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: post.isLikedByCurrentUser ? "heart.fill" : "heart")
|
||||
.foregroundColor(post.isLikedByCurrentUser ? .red : .primary)
|
||||
Text("\(post.likes)")
|
||||
.font(.subheadline)
|
||||
Spacer()
|
||||
|
||||
HStack(spacing: 4) {
|
||||
Image(systemName: post.isLikedByCurrentUser ? "heart.fill" : "heart")
|
||||
.foregroundColor(post.isLikedByCurrentUser ? .red : .primary)
|
||||
Text("\(post.likes)")
|
||||
.font(.subheadline)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(8)
|
||||
.background(Color(UIColor.systemBackground)) // Фон только для текстовой части
|
||||
}
|
||||
.padding(8)
|
||||
.background(Color(UIColor.systemBackground)) // Для поддержки темной/светлой темы
|
||||
.cornerRadius(12)
|
||||
.cornerRadius(6) // Закругляем всю карточку
|
||||
.clipped() // Обрезаем дочерние вью по закругленной форме родителя
|
||||
.shadow(color: Color.black.opacity(0.1), radius: 5, x: 0, y: 2)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user