有没有办法在iOS8上简单地更改UIPopoverView背景颜色(包括它的箭头)?
(我确实阅读了几篇关于自定义的文章" UIPopoverControllers"。这是否适用于此,意味着答案是"没有"?)
这不是我应该能够在触发弹出窗口的 prepareForSegue 方法中解决的问题吗?我怎样才能达到相应的视图来改变它的外观?
答案 0 :(得分:55)
我找到了解决方案。使用iOS8不再需要子类化!可以在tableview中访问和更改背景 - >导航 - > popoverPresentationController
self.navigationController?.popoverPresentationController?.backgroundColor = UIColor.redColor()
在WWDC会话214中有关此内容的更多信息。
答案 1 :(得分:8)
你可以像这样修改popover:
let popoverViewController = self.storyboard?.instantiateViewControllerWithIdentifier("popoverSegue")
popoverViewController!.popoverPresentationController?.delegate = self
popoverViewController!.modalPresentationStyle = .Popover
let popoverSize = CGSize(width: 150, height: 60)
popoverViewController!.preferredContentSize = popoverSize
let popover = popoverViewController!.popoverPresentationController
popover?.delegate = self
popover?.permittedArrowDirections = .Up
popover?.sourceView = self.view
//change background color with arrow too!
popover?.backgroundColor = UIColor.whiteColor()
popover?.sourceRect = CGRect(x: self.view.frame.width, y: -10, width: 0, height: 0)
presentViewController(popoverViewController!, animated: true, completion: nil)
答案 2 :(得分:1)
似乎popoverPresentationController.backgroundColor不再在iOS13中工作。
弹出窗口箭头现在看起来像弹出窗口viewController的view.backgroundColor的颜色。
这是下面的演示的完整代码:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let sourceButton = sender as? UIButton, let popover = segue.destination.popoverPresentationController {
popover.sourceView = sourceButton.superview
popover.sourceRect = sourceButton.frame
popover.permittedArrowDirections = [.left]
popover.delegate = self
segue.destination.preferredContentSize = CGSize(width: 100, height: 100)
//popover.backgroundColor = sourceButton.tintColor //old way
segue.destination.view.backgroundColor = sourceButton.tintColor //new way
}
}
@IBAction func btnTap(_ sender: Any) {
performSegue(withIdentifier: "popoverSegue", sender: sender)
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
答案 3 :(得分:1)
SwiftUI:Xcode 11.5
添加带有颜色的.background
修饰符并添加.edgesIgnoringSafeArea
修饰符。
.popover(isPresented: self.$vm.presentMenu, content: {
self.menuView
.background(Color.bgGray.edgesIgnoringSafeArea(.all))
})
答案 4 :(得分:0)
只需添加一下,如果您是在UIPopover内使用SwiftUI或使用SwiftUI的popover修饰符,则只需在后台使用Color
即可设置弹出框的背景颜色,就像在{ {1}}。
如果您希望箭头为彩色,则可以在背景颜色中添加ZStack
修饰符,以便将其扩展到箭头中。
SwiftUI示例:
.edgesIgnoringSafeArea(.all)