Вопросы

Включение модификаторов представления 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

Похожие записи

ParseError: 172: 3: Тип сообщения object_detection.protos.TrainConfig не имеет поля с именем fine_tune_checkpoint_version

admin

Параметризация azureSubscription из группы переменных в конвейере yaml

admin

В AWS Пробовал подключать rds из ec2, оба находятся в одном и том же vpc (не vpc по умолчанию), получая ошибку

admin

AWS Cognito — PreTokenGeneration без параметра clientMetadata при обновлении токена

admin

Ошибка npm install bcrypt с ошибкой: не удается найти модуль ‘nan’

admin

На 33% меньше инструкций, на 17% меньше доступа к памяти, но в 4 раза быстрее?

admin