如何创建一个包含自动滚动到顶部的 scrollView 的弹出框?

Posted

技术标签:

【中文标题】如何创建一个包含自动滚动到顶部的 scrollView 的弹出框?【英文标题】:How can I create a popover which contains a scrollView automatically scrolled to the top? 【发布时间】:2017-05-23 06:43:50 【问题描述】:

我正在展示这样的弹出框:

    let popoverContent = (self.storyboard?.instantiateViewController(withIdentifier: segueIdentifiers.informationPopover))! as UIViewController
    let nav = UINavigationController(rootViewController: popoverContent)
    nav.modalPresentationStyle = UIModalPresentationStyle.popover
    let popover = nav.popoverPresentationController
    popoverContent.preferredContentSize = CGSize(width: 500,height: 600)
    popover?.delegate = self
    popover?.sourceView = self.view
    popover?.sourceRect = CGRect(x: 0, y: 0, width: 100, height: 100)

    self.present(nav, animated: true, completion: nil)

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle 
    return .none

正在创建的弹出框来自在storyboard 中创建的viewController

viewControllerpopover 的创建具有以下布局。

--View
---Scroll View
----View
-----Text View

我最初遇到的问题是容器顶部和Text View 之间的空间量很大。使用this link 我看到我可以删除Adjusts Scroll View Insets。这解决了顶部问题的尴尬间距,但是当scrollView 出现时,它仍然向下滚动三分之一并且顶部的一些文本被隐藏。

问题: scrollView 是呈现时向下滚动的三分之一。

问题: 有没有办法使用storyboard(即运行时属性)将scrollView 初始化为在顶部自动滚动?如果不是,由于我是通过情节提要 ID 以编程方式创建 popover,我该如何以编程方式执行此操作?

更新 1 我尝试将我的viewController 子类化并为scrollView 创建一个出口。在我的viewDidLoadviewWillAppearviewDidLayoutSubviewsviewDidAppearviewWillLayoutSubviews 中,我尝试了以下代码。这并没有解决我的问题。

let scroll2TopOffset = CGPoint(x: 0, y: 0)
self.aboutUsScrollView.setContentOffset(scroll2TopOffset, animated: true)

【问题讨论】:

【参考方案1】:

解决方案:textView 需要在 viewDidLoad 中关闭滚动,然后在 viewDidAppear 中重新打开

class AboutUsViewController: UIViewController 
    @IBOutlet weak var aboutUsTextView: UITextView!

    override func viewDidLoad() 
        super.viewDidLoad()
        aboutUsTextView.isScrollEnabled = false
    

    override func viewDidAppear(_ animated: Bool) 
        aboutUsTextView.isScrollEnabled = true
    

将留下问题 - 想知道是否有更好的方法来做到这一点。

【讨论】:

以上是关于如何创建一个包含自动滚动到顶部的 scrollView 的弹出框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 11 中像点击状态栏一样调用缓慢滚动到顶部的动画?

每天一点点之vue框架开发 - vue中使用vue-router切换页面时自动滚动到顶部的方法

如何移动从底部到顶部的图形的标题?

单击表格单元格时将 UIViewController 滚动到顶部

ios13防止下拉滚动到顶部的tableView以消除以模态方式呈现的viewController [重复]

在水平滚动中具有不同高度到顶部的集合视图引脚单元格