#swiftui #widgetkit
Вопрос:
Я начинающий программист SwiftUI, который пытается добавить виджет в свое приложение, но у него возникли некоторые проблемы с этим.
LazyVGrid просто выталкивает другой вид (логотип текст даты ()) из рамки для устройств с небольшим экраном (протестировано в симуляторе iPhone 8).
Как я могу привязать представление к верхней части рамки виджета, как в UIKit?
struct WidgetEntryView : View {
var entry: Provider.Entry
@Environment(.widgetFamily)
var widgetFamily
var body: some View {
VStack(alignment: .trailing, spacing: 6) {
if widgetFamily != .systemSmall {
HStack {
Image("log")
.resizable()
.scaledToFit()
.frame(maxWidth: .infinity, minHeight:20, maxHeight:20, alignment: .leading)
Text(Date(), style: .date)
.font(.system(size: 13, design: .default))
.foregroundColor(.white)
}
} else {
Image("log")
.resizable()
.scaledToFit()
.frame(maxWidth: .infinity, minHeight:20, maxHeight:20, alignment: .leading)
}
if widgetFamily == .systemLarge {
let columns: [GridItem] = Array(repeating: .init(), count: 2)
LazyVGrid(columns: columns) {
ForEach((0..<4)) { index in
ZStack (alignment: .bottomLeading) {
if let url = URL(string: entry.imageUrl[index]), let imageData = try? Data(contentsOf: url),
let uiImage = UIImage(data: imageData) { // Thread 1: Fatal error: Index out of range
Image(uiImage: uiImage)
.centerCropped()
.frame(maxHeight: 150, alignment: .center)
.cornerRadius(10)
.overlay(RoundedRectangle(cornerRadius: 10)
.stroke(Color.gray, lineWidth: 1))
.shadow(radius: 10)
} else {
Image("ph_background")
.centerCropped()
.frame(maxHeight: 150, alignment: .center)
.cornerRadius(10)
.overlay(RoundedRectangle(cornerRadius: 10)
.stroke(Color.gray, lineWidth: 1))
.shadow(radius: 10)
}
Text(entry.header[index])
.font(.system(size: 12))
.foregroundColor(.white)
.fontWeight(.light)
// .frame(maxHeight: 50)
.background(Rectangle().fill(Color.black).blur(radius: 20))
.padding(.bottom, 5)
.padding(.leading, 5)
.padding(.trailing, 5)
.padding(.top, 5)
}
}
.frame(height:160)
}
}
}
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.padding()
.background(LinearGradient(gradient: Gradient(colors: [Color(red:0.92, green:0.00, blue:0.02), Color(red:0.65, green:0.00, blue:0.01)]), startPoint: .top, endPoint: .bottom))
}
}