Прозрачный UIPopover

Есть ли способ сделать UIPopOver прозрачным (альфа = 0,75 или около того). К сожалению, для UIPopOver нет альфа-свойства. Мне нужно представить поповер, чтобы вид под ним все еще был частично виден. Есть идеи

4 ответа

Решение
popoverController.contentViewController.view.alpha = 0.5;

Альфа является свойством UIView, поэтому вам нужно получить представление popOver, а затем установить альфа для этого представления.

Начиная с iOS5.0, можно предоставить собственный фон для UIPopoverController, Этот фон должен быть получен из UIPopoverBackgroundView который обеспечивает нормальный UIView свойства как alpha, Обратите внимание, что название немного сбивает с толку - UIPopoverBackgroundView обеспечивает рамку, стрелку, а также фоновую графику.

Так что если вам нужен полностью полупрозрачный UIPopoverController все, что вам нужно сделать, это предоставить UIPopoverBackgroundView класс, который устанавливает его alpha к чему-то внизу 1.0, Вам также необходимо убедиться, что представление вашего contentViewController (полностью) прозрачно.

Пример:


Для получения дополнительной информации см. popoverBackgroundViewClass собственностью UIPopoverController:

popoverBackgroundViewClass

Класс, используемый для отображения фонового содержимого всплывающего окна.

@property (nonatomic, readwrite, retain) Class popoverBackgroundViewClass

обсуждение

Значение этого свойства по умолчанию равно nil, что указывает на то, что контроллер поповер должен использовать внешний вид поповера по умолчанию. Установка этого свойства в значение, отличное от nil, заставляет контроллер поповера использовать указанный класс для отрисовки фонового содержимого поповера. Указанный вами класс должен быть подклассом UIPopoverBackgroundView.

Доступность Доступно в iOS 5.0 и более поздних версиях. Объявлен в UIPopoverController.h

Для iOS 13:

Кажется, есть непрозрачное подпредставление с темно-серым фоном типа _UIPopoverStandardChromeView без средств API для управления им (ошибка Apple?). Чтобы сделать всплывающее окно прозрачным, вам может потребоваться добавить хак ниже к представленному контроллеру представления. Это должно быть выполнено во время или после вызова viewDidAppear(_:). Это не сработало в вызовах viewWillAppear(_:) или более ранних.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    // Only works in viewDidAppear()
    self.popoverPresentationController?.containerView?.subviews.last?.subviews.first?.alpha = 0
}

В настоящее время нет свойства для установки альфа UIPopoverController,

Если вы делаете: popoverController.contentViewController.view.alpha = 0.5;

Внутренний вид и контент будут прозрачными, а не UIPopoverController сам.

Связанный вопрос

Теперь вы можете использовать свойство backgroundColour для popoverPresentationController, например:

            if let popoverPresentationController = myController.popoverPresentationController {
                popoverPresentationController.backgroundColor = UIColor(white: 1, alpha: 0.5)
            }

(не забудьте установить представление в всплывающем окне и элементы управления в этом представлении прозрачным, а также соответствующим эффекту, который вы пытаетесь достичь)

Смотрите этот SO ответ для более подробной информации.

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