Как я могу прочитать ширину представления внутри массива представления без использования GeometryReader?

#swiftui

#swiftui

Вопрос:

Это мой массив некоторой записи, мне нужно знать, могу ли я прочитать размер этой записи без использования GeometryReader, например ширину записи?

 var body: some View {
    
let arrayOfRec = [Rectangle().frame(width: 100, height: 100), Rectangle().frame(width: 200, height: 200)]
    
    VStack
    {
        ForEach(0..<arrayOfRec.count) { index in
            arrayOfRec[index]
        }
    }
 
}
 

Ответ №1:

К сожалению, не представляется возможным получить ширину и высоту прямоугольника без geometry reader в чистом SwiftUI. Я пробовал методы, которые были привязаны к этой форме, но ничего не привело к размеру.

Неизвестно, каков вариант использования, но можно создать пользовательский объект, который содержит ширину и высоту прямоугольника.

 struct Rectangle_TEST {
    var rectangle: Rectangle
    var width: CGFloat
    var height: CGFloat
    init(width: CGFloat, height: CGFloat) {
        self.width = width
        self.height = height
        self.rectangle = Rectangle()
    }
    func getView(color: Color) -> some View {
        return self.rectangle
            .fill(color)
            .frame(width: self.width, height: self.height)
    }
}

struct ContentView: View {
    var body: some View {
        let arrayOfRec: [Rectangle_TEST] = [Rectangle_TEST(width: 100, height: 100), Rectangle_TEST(width: 200, height: 200)]
        VStack {
            ForEach(0..<arrayOfRec.count) { index in
                Text("Width: (arrayOfRec[index].width), Height: (arrayOfRec[index].height)")
                arrayOfRec[index].getView(color: .red)
            }
        }
    }
}
 

Выше я создал пользовательский объект и сохраняю ширину и высоту, к которым можно обращаться по отдельности, а затем функцию, которая вернет представление, и вы можете передать любые необходимые модификаторы. Но в настоящее время я не думаю, что в SwiftUI можно получить размеры без geometry reader.