#swift #swiftui
#swift #swiftui
Вопрос:
У меня есть этот код для списка, заполненного основными данными:
List {
ForEach(items.filter {
self.searchText.isEmpty ? true : $0.term!.contains(self.searchText)
}, id: .self) { item in
Button(action: {
globalVariables.selectedItem = item
}) {
Text(item.term!)
.font(fontItems)
.disabled(true)
.foregroundColor(globalVariables.selectedItem == item ? .black : .white)
}
.listRowBackground(
Group {
if ((globalVariables.selectedItem == nil) || (item != globalVariables.selectedItem)) {
Color(UIColor.clear)
} else if item == globalVariables.selectedItem {
Color("corListaSelecao").mask(RoundedRectangle(cornerRadius: 20))
}
}
.padding(EdgeInsets(top: 0, leading: 5, bottom: 0, trailing: 5))
)
}
.onDelete(perform: deleteItems)
.onAppear{
globalVariables.selectedItem = items.first
}
.cornerRadius(20)
}
.background(Color("fundoControles"))
.cornerRadius(10)
.padding(EdgeInsets(top: 5, leading: 10, bottom: 5, trailing: 10))
В результате создается список, подобный следующему рисунку:
Каждый раз, когда я выбираю новый элемент в списке, фон нового выбранного элемента на мгновение отображается в виде белого прямоугольника с жесткими краями, затем он рисуется так, как и должен быть, оранжевым с закругленными углами.
Я нигде не устанавливаю этот белый цвет.
У меня есть этот init в моем contentView:
init() {
UITextView.appearance().backgroundColor = .clear
UITableView.appearance().backgroundColor = .clear
UITableViewCell.appearance().backgroundColor = .clear
}
Откуда берется этот белый цвет?
Как мне избавиться от этой нежелательной вспышки?
Комментарии:
1. Вы нигде не меняли внешний вид UIKit?
2. да, но не до белого. Я добавил эту информацию к вопросу.
Ответ №1:
Это может быть выделение списка по умолчанию для Button
, попробуйте удалить Button
и использовать вместо .onTapGesture
этого напрямую Text
, например
Text(item.term!)
.font(fontItems)
.disabled(true)
.foregroundColor(globalVariables.selectedItem == item ? .black : .white)
// replacements for button to make whole row tappable
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
.contentShape(Rectangle())
.onTapGesture {
globalVariables.selectedItem = item
}
Комментарии:
1. Наложение на текст не подходит, потому что можно будет использовать только текст, а не всю ячейку. Единственным способом, который я нашел для решения этой проблемы, было сделать его кнопкой.
2. Нет, попробуйте как добавлено … frame contentShape — они делают всю строку доступной для прослушивания. Это проверено — это работает.