问题
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:
- in the console,
viewis indeed an instance ofUIScrollViewbut sending itcontentSizegives me the same error. - replacing
viewbyself.viewdoesn't solve the issue ; there is no local variable interfering here.
回答1:
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
viewattributeas 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
}
}
回答2:
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
来源:https://stackoverflow.com/questions/25814458/cannot-set-contentsize-of-an-uiscrollview-created-via-loadview