我想知道是否有办法删除UIPopoverPresentationController的左右边距:
我尝试:
suggestionsTableViewController.popoverPresentationController?.popoverLayoutMargins = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
但没有任何改变。
我也尝试使用UIPopoverBackgroundView:
suggestionsTableViewController.popoverPresentationController?.popoverBackgroundViewClass = HUBBPopoverBackgroundView.self
这是我的UIPopoverBackgroundView的代码:
class HUBBPopoverBackgroundView: UIPopoverBackgroundView {
override func layoutSubviews() {
super.layoutSubviews()
}
public override static func contentViewInsets() -> UIEdgeInsets {
return UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
}
public override static func arrowBase() -> CGFloat {
return 2.0
}
public override static func arrowHeight() -> CGFloat {
return 2.0
}
override var arrowOffset: CGFloat {
get {
return self.arrowOffset
}
set {
self.arrowOffset = newValue
}
}
override var arrowDirection: UIPopoverArrowDirection {
get {
return self.arrowDirection
}
set {
self.arrowDirection = newValue
}
}
}
你能帮帮我吗?
谢谢。
答案 0 :(得分:1)
不幸的是,popoverLayoutMargins
现在什么也没做;它曾经工作,但它停止了。您可以使用preferredContentSize
来指定弹出框的宽度,但是您无法指定其确切的展示位置。
如果你想要那种控制,不要使用弹出窗口;改为使用自定义控制器。使用UIPresentationController子类,您可以完全控制所呈现的视图控制器的位置。
答案 1 :(得分:0)
子类UIPopoverBackgroundView覆盖contentViewInsets以弥补默认边距。 (注意:必须重写UIPopoverBackgroundView的所有var和函数,子类才能正常工作。根据需要进行配置。)
class NoMarginsPopoverBackgroundView: UIPopoverBackgroundView {
override var arrowOffset: CGFloat
{
get { return 0.0 }
set { }
}
override var arrowDirection: UIPopoverArrowDirection
{
get { return [] }
set { }
}
override class func contentViewInsets() -> UIEdgeInsets {
return UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)
}
override class func arrowBase() -> CGFloat {
return 0.0
}
override class func arrowHeight() -> CGFloat {
return 0.0
}
}
然后,将UIPopoverPresentationController popoverBackgroundViewClass属性分配给子类。
popoverPresentationController?.popoverBackgroundViewClass = NoMarginsPopoverBackgroundView.self