Включение модификаторов представления SwiftUI в зависимости от платформы

Я работаю над кроссплатформенным приложением с использованием SwiftUI. У меня есть представление, состоящее из HStack с выстроенными в него различными элементами. По сути, это:

struct ContentView: View { var body: some View { HStack { // Some stuff on the left side of this HStack Spacer() // more stuff on the right side } } }

Spacer занимает столько места, сколько может, сдвигая представления перед ним в левую сторону, а виды после него — в правую сторону строки. Я дошел до того, что это отлично смотрится на iOS.

Однако в macOS ширина моего окна намного больше, и пользователь может изменить его размер. При такой большей ширине становится неудобно видеть содержимое строки, разделенное таким большим пространством. Поэтому я бы хотел ограничить ширину. По сути, я хочу это сделать:

struct ContentView: View { var body: some View { HStack { // a bunch of stuff in this stack } #if os(macOS) .frame(width: 120) #endif } }

Но это вызывает у меня ошибку Неожиданное состояние платформы (ожидаемое ‘os’, ‘arch’ или ‘swift’), исходящее из строки с модификатором .frame. Если я воссоздаю весь HStack внутри проверки платформы, как показано ниже, все будет работать.

struct ContentView: View { var body: some View { #if os(iOS) HStack { // a bunch of stuff in this stack } #elseif os(macOS) HStack { // a bunch of stuff in this stack } .frame(width: 120) #endif } }

Но похоже, что репликация всего внутри HStack очень подвержена ошибкам, просто чтобы иметь возможность изменять модификатор в зависимости от платформы. Неужели нет возможности условно скомпилировать только код модификатора?

Эта ветка может быть полезна: stackoverflow.com/a/62099616/14733292   —  person Cem Schemel    schedule 31.12.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!