IOS8でUIPopoverViewの背景色(矢印を含む)を簡単に変更する方法はありますか?
(「UIPopoverControllers」のカスタマイズに関するいくつかの記事を読みました。これはここでも当てはまります。つまり、答えは「いいえ」ですか?)
これは、ポップオーバーをトリガーするprepareForSegueメソッドで対処できるものではありませんか?対応するビューにアクセスして外観を変更するにはどうすればよいですか?
私は解決策を見つけました。 iOS8ではサブクラス化は不要になりました。背景は、tableview->ナビゲーション-> popoverPresentationController内からこのようにアクセスおよび変更できます。
self.navigationController?.popoverPresentationController?.backgroundColor = UIColor.redColor()
この詳細については、WWDCセッション214を参照してください。
次のようにポップオーバーを変更するだけです。
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)
UIPopover内でSwiftUIを使用している場合、またはSwiftUIのポップオーバー修飾子を使用している場合は、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()
}
}