Прозрачный 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 ответ для более подробной информации.