Обходной путь для исправления сбоя анимации компонента меню, когда для его метки установлено значение, выбранное в iOS26IOS

Программируем под IOS
Ответить
Anonymous
 Обходной путь для исправления сбоя анимации компонента меню, когда для его метки установлено значение, выбранное в iOS26

Сообщение Anonymous »

Для большей настройки я создал свой собственный инструмент выбора стилей меню в SwiftUI, используя компонент меню. Это упрощенная версия, позволяющая пользователю выбирать цвет:
Menu
{
ForEach(Color.allCases, id: \.self)
{
color in

Button
{
selectedColorBinding.wrappedValue = color
}
label:
{
HStack
{
Text(color.name)

Spacer()

if (selectedColorBinding.wrappedValue == color)
{
Image(systemName: "checkmark")
}
}
}
}
}
label:
{
HStack
{
Text(selectedColorBinding.wrappedValue.name)
Image(systemName: "chevron.up.chevron.down")
}
}

В iOS26 возникает сбой анимации после выбора элемента. Текст немного дергается, когда попадает в поле выбора, и иногда для появления шеврона требуется некоторое время. Единственный обходной путь, который я нашел, — это прикрепить .glassEffect() к меню, но это добавляет тень к фону или меняет ее цвет, когда она находится на фоне раздела.
Я думаю, что это может быть ошибка iOS26, и мне интересно, знает ли кто-нибудь лучший обходной путь или исправление. Полный MRE указан ниже:
import SwiftUI

enum Color: String, CaseIterable
{
case red
case green
case blue
case yellow
case purple

var name: String { rawValue.capitalized }
}

struct ContentView: View
{
@State private var selectedColor1: Color = .allCases.first!
@State private var selectedColor2: Color = .allCases.first!

var body: some View
{
Form
{
Section
{
self.menuPicker(for: self.$selectedColor1)
}

Section
{
self.menuPicker(for: self.$selectedColor2).glassEffect()
}
}
}

private func menuPicker(for selectedColorBinding: Binding) -> some View
{
Menu
{
ForEach(Color.allCases, id: \.self)
{
color in

Button
{
selectedColorBinding.wrappedValue = color
}
label:
{
HStack
{
Text(color.name)

Spacer()

if (selectedColorBinding.wrappedValue == color)
{
Image(systemName: "checkmark")
}
}
}
}
}
label:
{
HStack
{
Text(selectedColorBinding.wrappedValue.name)
Image(systemName: "chevron.up.chevron.down")
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... t-to-value
Ответить

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

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

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

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

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