首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要删除UIPopoverPresentationController的左右边距吗?

要删除UIPopoverPresentationController的左右边距吗?
EN

Stack Overflow用户
提问于 2017-04-01 20:34:09
回答 2查看 1.1K关注 0票数 1

我想知道是否有一种方法可以删除UIPopoverPresentationController的左右边距:

我尝试这样做:

代码语言:javascript
复制
suggestionsTableViewController.popoverPresentationController?.popoverLayoutMargins = UIEdgeInsets(top: -10, left: -10, bottom: -10, right: -10)

但一切都没有改变。

我也尝试使用UIPopoverBackgroundView:

代码语言:javascript
复制
suggestionsTableViewController.popoverPresentationController?.popoverBackgroundViewClass = HUBBPopoverBackgroundView.self

这是我的UIPopoverBackgroundView的代码:

代码语言:javascript
复制
  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
    }
  }
}

你能帮我吗??

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-04-01 21:15:20

不幸的是,popoverLayoutMargins现在什么都不做;它曾经工作过,但它停止了。您可以使用弹出式鼠标悬停的preferredContentSize来指定弹出式鼠标悬停的宽度,但不能指定弹出式鼠标的确切位置。

如果你想要这样的控件,不要使用弹出窗口,而是使用一个自定义的控制器。使用UIPresentationController子类,您可以完全控制所呈现的视图控制器的位置。

票数 2
EN

Stack Overflow用户

发布于 2019-03-27 05:51:06

覆盖contentViewInsets以弥补默认边距的子类UIPopoverBackgroundView。(注意:必须覆盖UIPopoverBackgroundView的所有变量和函数,子类才能工作。根据需要对其进行配置。)

代码语言:javascript
复制
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属性分配给子类。

代码语言:javascript
复制
popoverPresentationController?.popoverBackgroundViewClass = NoMarginsPopoverBackgroundView.self
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43156924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档