Я написал код для отображения всплывающего окна из ячейки UICollectionView, если ячейка выбрана, но по какой-либо причине недоступна. Он работает нормально, за исключением того, что контент никогда не размещается правильно во всплывающем окне. Обратите внимание, что в двух показанных примерах содержимое всегда смещается в сторону курсора примерно на половину толщины курсора.


Понятно, что размер вычисляется правильно, но кажется, что контроллер popover просто неправильно рассчитывает положение popupView. Поскольку направление сдвига находится вне моего контроля, я не могу просто сместить все на несколько пикселей в качестве обходного пути.
В раскадровке просто есть popupView с ограничениями для его центрирования по горизонтали и вертикали в представлении сцены:

А вот мой код... Обратите внимание, я включил рамку вокруг представления, чтобы подчеркнуть сдвиг.
// Внутри коллекцииView:didSelectItemAtIndexPath: UIStoryboard* mainStoryboard = [UIStoryboard StoryboardWithName:@"Main" Bundle:nil]; MenuUnavailableViewController* muc = [mainStoryboard InstantiateViewControllerWithIdentifier:@"MenuOptionUnavailable"]; muc.modalPresentationStyle = UIModalPresentationPopover; [самопредставлениеViewController: muc анимированный: НЕТ завершения: ноль]; MenuCollectionViewCell* menuCell = (MenuCollectionViewCell*) [menuCollection cellForItemAtIndexPath:indexPath]; muc.popoverPresentationController.sourceView = menuCollection; muc.popoverPresentationController.sourceRect = menuCell.frame; muc.popoverPresentationController.permitedArrowDirections = UIPopoverArrowDirectionAny; @implementation MenuUnavailableViewController - (void) viewWillAppear:(BOOL)animated { [супер viewWillAppear: анимированный]; [self.view layoutSubviews]; self.preferredContentSize = self.popupView.bounds.size; self.popupView.layer.borderColor = [UIColor blackColor].CGColor; self.popupView.layer.borderWidth = 2; self.popupView.layer.cornerRadius = 12; } Я довольно долго успешно создавал поповеры, используя эту формулу, а затем однажды какое-то обновление iOS или Xcode незаметно нарушило позиционирование (не уверен, но думаю, это было где-то в iOS 13 или 14). Кто-нибудь знает, что я делаю неправильно? Я искал полный пример реализации всплывающих окон в последней версии iOS, но нигде его не нашел.