我想在单击 navigationItem 时 ScrollView 。 但是..这里有一些错误。
我想制作类似 snapchat 的 ScrollView 。 它工作正常,但是......当我从 viewdidload 函数调用 scrollView 时,scrollView 为零!
我已经将 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/