Использовать SwiftUI GeometryReader без влияния на внешнюю рамку?

Можно ли использовать GeometryReader таким образом, что он не просто заполняет родительское представление?

В качестве конкретного примера, я хочу контролировать нижнее поле, используя .padding(.bottom, geometry.safeAreaInsets.bottom > 0 ? 0 : 12.0), Это позволит использовать безопасную область в качестве поля на iPhone X и настраиваемое поле на старых устройствах.

Без GeometryReader мой взгляд занимает место, соответствующее его фактическому вертикальному размеру. С ридером вид занимает 1/2 экрана.

    VStack {
      Spacer()
      GeometryReader { proxy in // Lays out nicely without this...
        HStack {
          Text("Wrong")
          Spacer()
        }.border(Color.gray, width: 1)
      }

2 ответа

Решение

Просто добавьте .fixedSize() Модификатор для вашего HStack. Это достигнет желаемого эффекта.

Вы также можете попробовать добавить .aspectRatio(contentMode: .fit)модификатор к GeometryReader.

Другие вопросы по тегам