有没有办法简单地改变 iOS8 上的 UIPopoverView 背景颜色(包括它的箭头)?
(我确实阅读了几篇关于自定义“UIPopoverControllers”的文章。这是否也适用于这里,意味着答案是否定的?)
这不是我应该能够在触发弹出框的prepareForSegue方法中解决的问题吗?我怎样才能达到相应的视图来改变它的外观?
有没有办法简单地改变 iOS8 上的 UIPopoverView 背景颜色(包括它的箭头)?
(我确实阅读了几篇关于自定义“UIPopoverControllers”的文章。这是否也适用于这里,意味着答案是否定的?)
这不是我应该能够在触发弹出框的prepareForSegue方法中解决的问题吗?我怎样才能达到相应的视图来改变它的外观?
我找到了解决方案。iOS8 不再需要子类化!可以从 tableview -> navigation -> popoverPresentationController 中访问和更改背景
self.navigationController?.popoverPresentationController?.backgroundColor = UIColor.redColor()
在 WWDC session 2014 中了解更多信息。
您可以像这样简单地修改弹出框:
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)
似乎 popoverPresentationController.backgroundColor 不再适用于 iOS13。
弹出框箭头现在似乎呈现弹出框视图控制器的 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
}
SwiftUI:Xcode 11.5
添加.background
带有颜色的修饰符并添加.edgesIgnoringSafeArea
修饰符。
.popover(isPresented: self.$vm.presentMenu, content: {
self.menuView
.background(Color.bgGray.edgesIgnoringSafeArea(.all))
})
只需添加一点,如果您在 UIPopover 中使用 SwiftUI,或者如果您使用 SwiftUI 的 popover 修饰符,您可以通过在背景中使用 a 来设置弹出框的背景颜色Color
,就像在ZStack
.
如果您希望箭头着色,您可以将.edgesIgnoringSafeArea(.all)
修饰符添加到背景中的颜色,使其延伸到箭头中。
SwiftUI 示例:
import SwiftUI
struct PopoverTest: View {
@State var showing: Bool = true
var body: some View {
Button("Show") {
self.showing.toggle()
}
.popover(isPresented: $showing) {
ZStack {
Color.green.edgesIgnoringSafeArea(.all) // will color background and arrow
Text("Popover!")
}
}
}
}
struct PopoverTest_Previews: PreviewProvider {
static var previews: some View {
PopoverTest()
}
}