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

时间:2017-01-09 03:36:47

标签: ios uiscrollview swift3 uistoryboard uipopover

我正在提出这样一个人物:

    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
}

正在创建的popover来自viewController中创建的storyboard

创建viewController的{​​{1}}具有以下布局。

popover

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

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

问题: 有没有办法初始化scrollView使用scrollView在顶部自动滚动,即运行时属性?如果没有,我怎么能以编程方式执行此操作,因为我通过故事板ID以编程方式创建storyboard

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

viewWillLayoutSubviews

1 个答案:

答案 0 :(得分:0)

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

将问题保持开放 - 想知道是否有更好的方法来做到这一点。