Я пытаюсь создать представление внутри списка, занимающее всю ширину экрана. Автономный вид делает это. Попав в список, он занимает ~60% доступного места.
Я уже пробовал использовать .frame(minWidth: .infinity)
в списке или в представлении, но это ничего не меняет. Я также пробовал различные стили для списка, но безуспешно.
struct TodoRow: View {
@Binding var todo: Todo
var body: some View {
Toggle(isOn: $todo.isDone) {
Text(todo.content ?? "")
}
.border(.red)
.toggleStyle(.switch)
}
}
struct ContentView: View {
@State var td1 = Todo(content: "Hello Todo World 20240706T15:23:42.256Z", isDone: false)
var body: some View {
List {
TodoRow(todo: $td1)
TodoRow(todo: $td1)
}
.border(.green)
TodoRow(todo: $td1)
.border(.blue)
}
}
Хороший улов. Я использую Xcode 16 beta 2 и iOS 18 beta. Скачаю симулятор iOS 17, чтобы попытаться воспроизвести его в выпущенной версии.
Это изменение стиля Toggle
по умолчанию в iOS 18, при котором переключатель размещается под текстом там, где это необходимо.
Вы можете легко воссоздать старый стиль, например:
struct TodoRow: View {
@Binding var todo: Todo
var body: some View {
HStack { // 👈 Make sure this will be stacked horizontally
Text(todo.content ?? "") // 👈 Add the leading text in place
.frame(maxWidth: .infinity, alignment: .leading) // 👈 Make it always fill the space
Toggle(isOn: $todo.isDone) {
Text(todo.content ?? "")
}
.labelsHidden() // 👈 Hides the default label keeping the accessibility stuff
}
.toggleStyle(.switch)
}
}
Спасибо @mojtaba за ваш ответ, я видел, что вы уже ответили на тот же вопрос. Это критическое изменение в SwiftUI для iOS18, я отправил отзыв в Apple (ссылка FB14233030).
Я не могу воспроизвести такое поведение. На какой версии iOS и модели устройства вы используете это?