Список с системным цветом фона портится в темном режиме

Я пытаюсь установить цвет фона для списка, который будет адаптироваться к режиму iOS (светлый / темный). Я без проблем использую .systemGray5 в VStacks, но когда я использую его в списках и перехожу в темный режим, я получаю очень темный, почти черный цвет, что делает все непонятным.

Это происходит независимо от того, является ли список динамическим или статическим. Это ошибка? Или есть альтернативный способ сделать это?

    List {
        Text("Privacy").foregroundColor(Color(.systemRed))
    }.colorMultiply(Color(.systemGray5))

person Apostolos Apostolidis    schedule 15.10.2019    source источник


Ответы (3)


Проблема в том, что colorMultiply умножит все цвета в списке (текст, фон, разделитель) на данный цвет (см. умножить смешение цветов). Это затемнит весь вид, что, вероятно, выглядит нормально в светлом режиме, но противоположно тому, что вы хотите делать в темном режиме.

Есть два способа изменить цвет фона в списке:

List {
    Text("Privacy").foregroundColor(Color(.systemRed))
        .listRowBackground(Color(.systemGray5))
}
.background(Color(.systemGray5))

background изменит фон всего списка, но я предполагаю, что это действительно видно только в сгруппированных списках, поскольку между ячейками обычно нет пробелов.

listRowBackground изменяет цвет фона представления, когда оно используется в среде списка. Вероятно, это то, что вы хотите здесь использовать.

person Frank Schlegel    schedule 16.10.2019
comment
Хорошо, так что это помогло со статическими списками, но динамические списки по-прежнему не применяют системный серый цвет. Как только я напишу что-то вроде этого: List(pumpData) { pump in в списке нет серого цвета - person Apostolos Apostolidis; 16.10.2019
comment
Применяете ли вы listRowBackground к представлению, которое вы создаете внутри блока List() { ... }? - person Frank Schlegel; 16.10.2019
comment
Это мой нерабочий код: List(pumpData) { pump in Text("pump").listRowBackground(Color(.systemGray5)) }.background(Color(.systemGray5)) - person Apostolos Apostolidis; 16.10.2019
comment
Я дал еще один ответ с моим обходным путем для этой кажущейся ошибки .. - person Apostolos Apostolidis; 16.10.2019

Франк Шлегель дал ответ, который работает только для статических списков. Пока Apple не исправит это для динамических списков, я решил свою проблему с помощью этого кода.

List {
    ForEach(pumpData) { pump in
        Text("pump").listRowBackground(Color(.systemGray5))
        }
    }.background(Color(.systemGray5))
person Apostolos Apostolidis    schedule 16.10.2019

.secondarySystemGroupedBackground работал у меня.

person mnl    schedule 14.10.2020