iOS 14 UIMenu с заменой Детей не работает

Я хочу добавить UIMenu с дочерними элементами условного меню в меню UIButton на iOS14, но replaceChildren не работает.

self.button.menu = UIMenu( options: .displayInline, children:[
       UIAction(title:"Action 1"){_ in},
       UIAction(title:"Action 2"){_ in}
   ])
//Try to update menu's children but it does not work

self.button.menu = self.button.menu?.replacingChildren([ 
      UIAction(title:"Action 3"){_ in},
      UIAction(title:"Action 4"){_ in}
 ])

Меню не меняется. Мне нужно создать совершенно новый экземпляр UIMenu с новыми дочерними элементами и назначить его self.button.menu. Как использовать замену детям или какая-то ошибка?

1 ответ

Я тоже наткнулся на это. Почему-то используется replacingChildrenпривел к неизмененному дочернему массиву на iOS 14. Для iOS 15 поведение соответствует ожидаемому.

Однако я смог обойти это, просто установив вновь созданный экземпляр UIMenuвместо.

В вашем случае по телефону:

      self.button.menu = UIMenu(options: .displayInline, children:[
    UIAction(title:"Action 3"){_ in},
    UIAction(title:"Action 4"){_ in}
])

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

      if #available(iOS 15.0, *) {
   self.button.menu = self.button.menu?.replacingChildren([ 
      UIAction(title:"Action 3"){_ in},
      UIAction(title:"Action 4"){_ in}
   ])
} else {
   self.button.menu = UIMenu(options: .displayInline, children:[
      UIAction(title:"Action 3"){_ in},
      UIAction(title:"Action 4"){_ in}
   ])
}

Я надеюсь, что это может помочь тому, кто в этом нуждается.

Другие вопросы по тегам