【问题标题】:How can I create a popover which contains a scrollView automatically scrolled to the top?如何创建一个包含自动滚动到顶部的 scrollView 的弹出框?
【发布时间】: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)

【问题讨论】:

    标签: ios uiscrollview swift3 uistoryboard uipopover


    【解决方案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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-20
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多