#ios #objective-c #swift #jsqmessagesviewcontroller #ios14
#iOS #objective-c #swift #jsqmessagesviewcontroller #ios14
Вопрос:
Я использую JSQMessageViewController и сталкиваюсь с проблемой (только в ios14), что я не могу видеть элементы мультимедиа, такие как изображения, видео и аудио, на устройстве, хотя эти представления генерируют иерархию представлений отладки. Смотрите прикрепленное изображение ниже:-
скриншот иерархии представления отладки:
вот описание UIImage внутри ячейки представления коллекции: <UIImageView: 0x7fe7d6d95b30; frame = (20 8; 177 131); clipsToBounds = ДА; непрозрачный = НЕТ; авторазмер = RM BM; Пользовательское взаимодействие разрешено = НЕТ; layer = <CALayer: 0x600001ce4ec0>>
вот скриншот прилагаемого экрана:
Вы можете видеть, что представление создало пространство для изображения, но оно не отображается!
Кто-нибудь сталкивается с этой проблемой? как я могу решить эту проблему. Эта проблема возникает в iOS 14, она отлично работает в iOS 13.
Комментарии:
1.
JSQMessageViewController
не обновлялся более 4 лет и больше не поддерживается. Может быть, вы можете попробоватьMessageKit
вместо этого: github.com/MessageKit/MessageKit
Ответ №1:
Вам необходимо перезаписать в JSQMessagesMediaViewBubbleImageMasker.m
метод — (void)jsq_maskView:(UIView *) просмотр с изображением: (UIImage *) изображение и строка изменения:
view.layer.mask = imageViewMask.layer;
чтобы быть
view.maskView = imageViewMask;
Я предлагаю вам использовать category для этого. Для меня это было решением.
Комментарии:
1. Спасибо, @Vladimir Это решение сработало для меня, но я хочу подтвердить, нужно ли нам добавлять проверку
#available(iOS 14.0, *)
перед добавлением этой строки?
Ответ №2:
Я хотел бы предложить изменить следующим образом вместе с ответом Владимира для обратной совместимости:
if (@available(iOS 14.0, *)) {
view.maskView = imageViewMask;
} else {
view.layer.mask = imageViewMask.layer;
}