当前位置: 首页 > 知识库问答 >
问题:

如何在iOS中创建一个可以到达屏幕边界的popover?

尉迟卓
2023-03-14

我想做的是让POPOVER的左上角与父视图的左上角相等,我试过这样的操作:

override func viewDidLoad() {
    super.viewDidLoad()
    let button = UIButton(frame: CGRect(x: 250, y: 250, width: 100, height: 100))
    button.backgroundColor = UIColor.red
    button.addTarget(self, action: #selector(popover), for: .touchUpInside)
    view.addSubview(button)
}

@objc func popover() {
    let contentVC = UIViewController()
    contentVC.view.frame = CGRect(x: 0, y: 0, width: 300, height: 300)
    contentVC.view.backgroundColor = UIColor.blue
    contentVC.modalPresentationStyle = .popover
    contentVC.preferredContentSize = CGSize(width: 300, height: 300)
    let popVC = contentVC.popoverPresentationController
    popVC?.sourceView = view
    popVC?.sourceRect = CGRect(x: 0, y: 0, width: 300, height: 300)
    popVC?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
    popVC?.popoverLayoutMargins = .zero
    self.present(contentVC, animated: true, completion: nil)
}

然而,结果是这样的:截图看起来像是iOS添加了一些偏移量到popover

我还尝试将modalPresentationStyle更改为overCurrentContext,但它变成了fullscreen。有没有办法使用当前的ViewController来做到这一点?(而不是手动将子视图添加到该位置)

共有1个答案

姜学海
2023-03-14

如果我没理解错的话,我很少修改你的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    let button = UIButton(frame: CGRect(x: 250, y: 250, width: 100, height: 100))
    button.backgroundColor = UIColor.red
    button.addTarget(self, action: #selector(popover), for: .touchUpInside)
    view.addSubview(button)
}

@objc func popover() {
    
    let ac = UIAlertController(title: "Hello!", message: "This is a test.", preferredStyle: .actionSheet)
    
    let popover = ac.popoverPresentationController
    popover?.sourceView = view
    popover?.sourceRect = CGRect(x: 32, y: 32, width: 100, height: 100)

    present(ac, animated: true)
}
 类似资料:
  • 问题内容: 您知道如何在Blackberry应用程序中创建无边界弹出屏幕吗? 问题答案:

  • 我必须创建一个新的类来创建一个全新的PaintComponent()吗?或者我会简单地创建一个新的Graphics2D对象,这样我就可以使用不同的字体、颜色等等?我想最让我困惑的是我不能调用不同的draw方法,因为我仍然需要传递g2d作为参数。因此,在我看来,我需要从另一个已经有g2d对象的方法中创建线程。 如果这让我感到困惑,我很抱歉,因为我仍然是Java的初学者。如果你需要更多的信息,尽管告诉

  • 现在,我正在使用CustomView在画布上绘制,我需要将画布(可能作为位图)保存到FileOutputStream中,然后移动到另一个具有相同功能的CustomView。 我不确定我是否应该使用不同的方法来实现它,但是我正在做的任何事情都在我调用start Active(i)时崩溃。 我的理解是,我的CustomView是用onTouch()绘制的,它绘制到路径对象上,然后调用onDraw(ca

  • 问题内容: 我正在使用和在CSS中创建一个半透明的圆圈。 在这个圆的周围,我希望有另一个完全透明的边界(例如10个像素),而又想有另一个半透明的边界(10个像素)。 这是我创建圈子的方式: 我需要怎么做才能在现有边界周围创建另一个边界,然后再创建另一个边界? 问题答案: 您可以使用简单的边框并将背景裁剪到,以在填充区域中创建透明部分: 您也可以考虑 您可以轻松缩放到任意数量的边界:

  • 问题内容: 如何从一个活动屏幕导航到另一个活动屏幕?在第一个屏幕中,我有一个按钮,如果我单击该按钮,则必须移至另一个“活动”屏幕。 问题答案:

  • 现在我们知道如何使用纹理和光照创建一个基本的3D模型,现在,该创建我们自己的3D世界了。本节,我们将创建三套缓冲区,立方体缓冲区、墙壁缓冲区、地板缓冲区。我们使用立方体缓冲区渲染在我们的世界中随机放置的木箱,使用墙壁缓冲区用来创建墙壁,使用地板缓冲区用来创建地板和天花板(我们可以重用地板缓冲区来创建天花板,是因为它们的形状完全相同)。接下来,我们为文档添加键盘事件监听器,以便可以使用方向键和鼠标来