SwiftUI NavigationSplitView на iPad: удалить акцент с выбранного элемента на боковой панелиIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI NavigationSplitView на iPad: удалить акцент с выбранного элемента на боковой панели

Сообщение Anonymous »

Я использую NavigationSplitView для приложения, которое будет использоваться как на iPad, так и на iPhone.
В приведенном ниже коде я хочу выделить выбранный элемент на боковой панели только словом «Выбрано».
При работе на iPad Air 5-го поколения боковая панель отображается по-разному в предварительном просмотре и в симуляторе:
  • В при предварительном просмотре поведение именно то, что мне нужно: слово «Выбранный» указывает на элемент, видимый в подробном представлении (см. рисунок ниже без синей рамки).
  • Однако при запуске в симуляторе вокруг выделенного фрагмента виден акцентный прямоугольник (см. рисунок ниже с синей рамкой). Моя цель — удалить этот прямоугольник.
На самом деле, если мы удалим модификатор .listRowBackground(), в предварительном просмотре акцент будет светло-серым, в симуляторе — синим.
Некоторые вещи, которые я пробовал:
  • Замена .listRowBackground(EmptyView()) на .listRowBackground(Collar.clear): безуспешно.
  • Использование .accentColor(.clear): не работает (прямоугольник становится белым), и более того, он устарел, поэтому я хочу этого избежать.
  • Добавление .tint(.clear) и listItemTint(.clear): нет успех.
  • Замена списка на ForEach, но тогда мне приходится заново создавать макет строк, а результат уже не тот.
Мне нужно сохранить «желтый» фон.
Кто-нибудь знает, как удалить этот прямоугольник?
Мой код:

Код: Выделить всё

struct MyView: View {

@State private var selected: MyContent?

let list = [MyContent("First"), MyContent("Second"), MyContent("Third")]

var body: some View {

NavigationSplitView {

List(list, selection: $selected) { item in

NavigationLink(value: item) {
HStack {
Text(item.title)
Spacer()
Text(selected == item ? "Selected" : "")
}
.foregroundColor(.primary)
}
.listRowBackground(EmptyView())

}
.scrollContentBackground(.hidden)
.listStyle(.plain)
.background(.yellow)

} detail: {
if let selected {
Text("Detail of \(selected.title)")
}
}
}
}

struct MyContent: Identifiable, Hashable {
let id = UUID()
let title: String

init(_ title: String) {
self.title = title
}
}
Чего я хочу достичь (ОК в предварительном просмотре):
Изображение

Прямоугольник, который я хочу удалить (работает в симуляторе):
Изображение

Развертывание iOS 16.0 на Xcode 14.

Подробнее здесь: https://stackoverflow.com/questions/738 ... in-sidebar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»