Damien
Damien

Reputation: 27493

Cannot set contentSize of an UIScrollView created via loadView

I need to set the contentSize of an UIScrollView outside of the loadView function.

However when trying to do so, I have the error 'UIView' does not have a member named 'contentSize'.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        var bigRect = view.bounds
        bigRect.size.width *= CGFloat(someInt)

        view.contentSize = bigRect // 'UIView' does not have a member named 'contentSize'
    }

    override func loadView() {
        view = UIScrollView(frame: UIScreen.mainScreen().bounds)
    }

}

Thanks !

Notes:

Upvotes: 0

Views: 1077

Answers (2)

Francescu
Francescu

Reputation: 17054

view is an UIViewController attribute of type UIView. So you should configure the scroll view within a local variable first and then set it to the view variable :

override func loadView() {
    var scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
    scrollView.contentSize = <Whatever>
    view = scrollView
}

If you plan to change the scroll view later you should consider either:

  • Add a new attribute to your class (good practice)
  • Or cast anytime the view attribute as UIScrollView (pretty bad practice)

E.g:

class ViewController: UIViewController {
    var scrollView:UIScrollView!

    override func viewDidLoad() {
        var bigRect = view.bounds
        bigRect.size.width *= CGFloat(someInt)

        scrollView.contentSize = bigRect.size
    }

    override func loadView() {
        scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
        view = scrollView
    }

}

Upvotes: 3

Jack Chorley
Jack Chorley

Reputation: 2344

Try renaming it to scrollView instead of view as view is already a variable attached to all UIViewControllers so it might be getting confused. Unless of course you are trying to say that you replaced the view with a scrollView in the storyboard. In this case, you need to cast the view as a scrollView as shown below:

(view as UIScrollView).contentSize

Upvotes: 2

Related Questions