我想在屏幕上加载视图时配置scrollView
。但是在使用AutoLayout
时内容大小无法正常工作。如果放在ViewDidAppear
中,它可以作为预计,但我希望我的scrollview配置ViewDidLoad
方法
@IBOutlet weak var addressScrollView: UIScrollView!{
didSet{
self.addressScrollView.pagingEnabled = true
self.addressScrollView.pagingEnabled = true
self.addressScrollView.showsHorizontalScrollIndicator = false
}
}
var billQuotes = ["This is bill","Bill Smokes","Bill drinks","But Still Codes"]
var viewFrame: CGRect = CGRectMake(0, 0, 0, 0)
override func viewDidLoad() {
super.viewDidLoad()
configureScrollView()
}
override func viewDidLayoutSubviews() {
self.addressScrollView.contentSize = CGSizeMake(self.addressScrollView.frame.size.width * CGFloat(billQuotes.count+1), self.addressScrollView.frame.size.height)
}
override func viewDidAppear(animated: Bool) {
//if placed in view did appear it works as expected but i want it to
}
func configureScrollView(){
for bill in billQuotes{
var index = find(billQuotes,bill)
viewFrame.size = self.addressScrollView.frame.size
viewFrame.size.width = self.addressScrollView.frame.size.width - 20
viewFrame.origin.x = ((self.addressScrollView.frame.size.width) * CGFloat(index!)) + 10
let addressView = UIView()
addressView.layer.borderWidth = 2.0
addressView.layer.borderColor = UIColor.grayColor().CGColor
addressView.layer.cornerRadius = 5
addressView.frame = viewFrame
addressView.backgroundColor = UIColor(red: 0.847, green: 0.847, blue: 0.843, alpha: 1.00)
var billLabel = UILabel(frame: CGRectMake(32, 8, addressView.frame.size.width - 34, 30))
billLabel.textAlignment = NSTextAlignment.Left
billLabel.text = "\(bill)"
billLabel.font = UIFont.systemFontOfSize(20)
billLabel.textColor = UIColor(red: 0.337, green: 0.341, blue: 0.345, alpha: 1.00)
addressView.addSubview(billLabel)
addressScrollView.addSubview(addressView)
}
}
UPDated:我希望我的scrollView在viewDidLoad中进行配置,以便在视图显示后的几秒钟后立即看到
答案 0 :(得分:0)
尝试根据您的观看次数(UIScrollView
,viewDidLoad
)在addressView
中设置billLabel
的内容大小
ScrollView.contentSize = CGSizeMake(<Calculate width>, <Calculate height>)
答案 1 :(得分:0)
你应该覆盖viewWillLayoutSubviews并将configureScrollView()放在那里。
答案 2 :(得分:0)
问题是,当您在configureScrollView()
中呼叫viewDidLoad
时,其layoutSubviews
尚未运行,因此UIScrollView
不知道它自己frame
}与superview
有关。因此,当您在viewDidLoad
中对其进行配置时,它将针对view
的框架进行正确配置,然后该框架将发生变化(self.view.frame
可能600
width
和height
这里)。在viewDidAppear
viewDidLayoutSubviews
已经执行了superview
,这就是为什么它在这里工作的原因,因为现在frame
有正确的layoutSubviews
。
在配置UIScrollView
之前,您可以强制override func viewDidLoad() {
super.viewDidLoad()
self.view.setNeedsLayout() // Not sure if this is needed
self.view.layoutIfNeeded() // Not sure if this is needed
self.addressScrollView.setNeedsLayout()
self.addressScrollView.layoutIfNeeded()
configureScrollView()
self.addressScrollView.contentSize = CGSizeMake(self.addressScrollView.frame.size.width * CGFloat(billQuotes.count+1), self.addressScrollView.frame.size.height)
}
。我真的不明白需要强制哪些观点背后的逻辑,所以你不得不玩它一点。但事情就是这样:
{{1}}