Контекстное меню выбора цвета и размера кадра Swift 5 iOS 13 - PullRequest
0 голосов
/ 30 января 2020

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

  1. Когда я долго нажимаю UICollectionViewCell, он выделяет черный в темноте режим и это выглядит ужасно, так как у меня не весь черный цвет фона. Как я могу изменить его на прозрачный или желаемый цвет?
  2. У меня есть пузырь, который отображает сообщение пользователя, и я хотел бы использовать контекстное меню для пузырьков. Проблема в том, что, когда контекстное меню по умолчанию просматривает мою ячейку, оно обрезает нижнюю часть пузыря и выглядит как часть всего сообщения. Я пытался играть с высотой ячейки и некоторыми другими параметрами - ничего не получалось.

Как я могу исправить проблемы? Пожалуйста, помогите.

**** Мой код: ****

@available(iOS 13.0, *)

override func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {

    let configuration = UIContextMenuConfiguration(identifier: nil, previewProvider: nil){ action in

            let cell = collectionView.cellForItem(at: IndexPath.init(row: indexPath.row, section: 0)) as? ChatCell

        cell?.tintColor = .clear

        self.view.backgroundColor = .clear


           let messageText = cell?.textView.text

            let userNameZdes = cell?.nameView.text

            let report = UIAction(title: "Report", image: UIImage(systemName: "exclamationmark.bubble"), identifier: UIAction.Identifier(rawValue: "report")) {_ in
                print("report clicked..")

                if (cell?.textView.text.count)! > 2 {

                     print("the text of the message = \(messageText!) & the user is \(userNameZdes!)")

                } else {

                    print("the user has attached a bad pic")
                }

            }

            let block = UIAction(title: "Block user", image: UIImage(systemName: "person.crop.circle.badge.xmark"), identifier: UIAction.Identifier(rawValue: "block"), attributes: .destructive) {_ in
                print("block clicked..")
            }
            return UIMenu(title: "Message Actions", image: nil, identifier: nil, children: [report, block])
        }
        return configuration
}

1 Ответ

0 голосов
/ 30 марта 2020

Сегодня я столкнулся с той же борьбой, и нашел решение, которое сработало для меня, поэтому я надеюсь, что оно актуально и для вас.

Я нашел решение в этом посте: https://kylebashour.com/posts/context-menu-guide

Если вы прокрутите вниз до раздела: UITargetedPreview, есть пример для UITableView, однако вы можете применить то же решение для UICollectionView:)

...