删除UIPopoverPresentationController的左右边距?

时间:2017-04-01 12:34:09

标签: ios swift uikit

我想知道是否有办法删除UIPopoverPresentationController的左右边距:

popover

我尝试:

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
    }
  }
}
你能帮帮我吗?

谢谢。

2 个答案:

答案 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