滚动视图中的 Swift 弹出框

Posted

技术标签:

【中文标题】滚动视图中的 Swift 弹出框【英文标题】:Swift popover in scrollview 【发布时间】:2016-02-04 10:35:47 【问题描述】:

我有一个带有一些子视图的滚动视图。在这个子视图中,我还有其他子视图。

我想展示一个固定到这个“嵌套”子视图之一的弹出框。

我正确显示了弹出框,并且它被锚定到更正的子视图,但是每当我滚动滚动视图时,弹出框不会随滚动视图一起移动。 每次水平滚动滚动视图时,我都希望弹出框移动并调整其“x”原点。

这是我用来呈现弹出框的代码。

func showAlarmViewController(notification: NSNotification)

    troubleViewController = TroubleshootViewController()
    troubleViewController!.modalPresentationStyle = .Popover
    troubleViewController!.preferredContentSize = CGSizeMake(300.0, 150.0)

    popoverMenuViewController = troubleViewController!.popoverPresentationController
    popoverMenuViewController!.permittedArrowDirections = .Down
    popoverMenuViewController!.delegate = self
    popoverMenuViewController!.passthroughViews = [self.detailScrollView]
    popoverMenuViewController!.sourceView = (notification.object as! UIView).superview
    popoverMenuViewController!.sourceRect = CGRect(x: -100, y: 100, width: 300, height: 150)

    presentViewController(
        troubleViewController!,
        animated: true,
        completion: nil)


有什么帮助吗? 谢谢!

【问题讨论】:

【参考方案1】:

您必须将 popoverMenuViewController 添加到滚动视图的嵌套子视图之一或滚动视图中

scrollview.addsubview(popoverMenuViewController)  

如果 popoverMenuViewController 控制器是 UIViewController,则在滚动视图中添加容器视图并将该容器视图链接到 popoverMenuViewController。稍后您可以将容器视图添加为滚动视图的子视图。

这里是如何实现容器视图的链接。 How to use a 'Container View' in ios? 还有http://spin.atomicobject.com/2015/07/21/ios-container-views/

或者在scrollview的嵌套子视图之一中添加popoverMenuViewController

subviewofscrollview.addsubview(popoverMenuViewController)

根据您添加此 popoverMenuViewController 的子视图内容大小设置您的 popoverMenuViewController 锚。

【讨论】:

popoverMenuViewController 是一个 UIPopoverPresentationController,我不能将它添加为子视图。 我编辑了代码并提供了一些链接,您可以如何使用容器视图。 我明白了,但是我不能使用原生的“presentViewController”功能吗?因为我记得我在 obj-c 中做了这些东西,但我不记得是怎么做的……可能我在 scrollViewDidScroll 方法中做了一些事情……我想使用本机弹出框,因为它会自动在正确的位置显示弹出框

以上是关于滚动视图中的 Swift 弹出框的主要内容,如果未能解决你的问题,请参考以下文章

滚动 MKMapView 时淡出弹出框

弹出框内容视图的额外高度

如何检测 UIScrollView 何时变为可滚动?

如果弹出框作为模型呈现,UITableViewController 将失去滚动功能

Swift 3:滚动视图中的 UIPickerView

NavController 中的滚动视图在显示键盘后不会重置(Swift)