ios - 从 viewdidload 调用时 scrollView 为 nil

标签 ios swift uiscrollview

我想在单击 navigationItem 时 ScrollView 。 但是..这里有一些错误。

  1. 我想制作类似 snapchat 的 ScrollView 。 它工作正常,但是......当我从 viewdidload 函数调用 scrollView 时,scrollView 为零!

  2. 我已经将 snapchat 制作成了滑动 View 。但我想在单击导航项(心形标记)时进行滑动 View 。

我的 ViewController viewdidload func - 它工作正常

@IBOutlet weak var scrollView: UIScrollView!


var V1 : LeftViewController = LeftViewController(nibName: "LeftViewController", bundle: nil)
var V2 : CenterViewController = CenterViewController(nibName: "CenterViewController", bundle: nil)
var V3 : RightViewController = RightViewController(nibName: "RightViewController", bundle: nil)



override func viewDidLoad() {

    super.viewDidLoad()



    self.addChildViewController(V1)
    self.scrollView.addSubview(V1.view)
    V1.didMoveToParentViewController(self)

    self.addChildViewController(V2)
    self.scrollView.addSubview(V2.view)
    V2.didMoveToParentViewController(self)

    self.addChildViewController(V3)
    self.scrollView.addSubview(V3.view)
    V3.didMoveToParentViewController(self)

    var V2Frame : CGRect = V2.view.frame
    V2Frame.origin.x = self.view.frame.width
    V2.view.frame = V2Frame


    var V3Frame : CGRect = V3.view.frame
    V3Frame.origin.x = 2 * self.view.frame.width
    V3.view.frame = V3Frame

    println(self)
    println(scrollView)
    println(V2.view.frame)

    self.scrollView.setContentOffset(CGPointMake(V2Frame.origin.x, self.view.frame.size.height), animated: false)



    self.scrollView.contentSize = CGSizeMake(self.view.frame.width * 3, self.view.frame.size.height)        }

我的 ViewController clickEvent 函数 - 为什么 scrollView 为 nil?

    func clickEvent() {

    self.scrollView?.scrollRectToVisible(V2.view.frame, animated: true)

    println(self)
    println(scrollView)
    println(V2.view.frame)
    //self.scrollView.setContentOffset(CGPointMake(V2.view.frame.origin.x, self.view.frame.size.height), animated: true)
}

我从其他 CenterViewController 调用 Viewcontroller 中的 clickEvent - 它可以正常调用,但是...在 ViewController 中,clickEvent 函数的 scrollView 为 nil。我该如何修复它?

func clickEvent(sender: AnyObject) {

   ViewController().clickEvent()
}

最佳答案

在您的代码中,您可以在 viewDidLoad 中获取并设置一个 View 框架。在 viewDidLoad 中, View 仅加载到内存中,但尚未加载到屏幕中,因此如果您尝试在 viewDidLoad 中向 View 询问其框架,您将无法获得一致的值。 而是使用 viewWillAppear,您可以在其中向 View 询问其框架,并且您会获得正确的值,因为 View 已准备好显示。

关于ios - 从 viewdidload 调用时 scrollView 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526668/

相关文章:

ios - 在 Xcode 7 中使用 AutoLayout 将 5 个 subview 均匀地分布在其父 View 的宽度上

swift - 从 Firebase 中删除帐户是否会自动注销用户?

ios - 在 UIScrollView 中添加文本字段时按钮消失

ios - 使用 NSNotifications 从 TableViewController 导航回 UIViewController

ios - 无法在iOS 6上启动debug IPA,在iOS 5上完美运行

iphone - CLLocationmanager : Save battery

ios - 如何在 iOS-swift 3.0 的 UILabel 中显示 html 文本

ios - 选择行时更改 UIImageView 中的图像?

协议(protocol)中的 Swift 协议(protocol)属性 - 候选人具有不匹配的类型

ios - UIPageViewController 带有一张固定的背景图片