前幾天在開發(fā)過程中遇到了scrollview不能滑動(dòng)的問題,然后就順便總結(jié)了以下的幾個(gè)原因:
1、contentSize 這個(gè)屬性,比uiscrollview的frame要小, 無需滾動(dòng), 自然就滾動(dòng)不了。 scrollenabled 這個(gè)屬性,標(biāo)識(shí)著是否允許滾動(dòng),要言設(shè)成yes
2、如果這個(gè)scrollView是在IB里面生成的話,還得手動(dòng)設(shè)置它的contentSize,并且不能在initWithNibName:bundle:里面設(shè)置,因?yàn)?
The nib file you specify is not loaded right away. It is loaded the first time the view controller’s view is accessed. If you want to perform additional initialization after the nib file is loaded, override the viewDidLoad method and perform your tasks there.
3、在self.view上添加scrollview 能正常滾動(dòng),但再次添加其他的view的時(shí)候,就不能正常滾動(dòng)了,必須用下面的一個(gè)方法才行,很好用。
-(void)viewDidLayoutSubviews{ [superviewDidLayoutSubviews]
附加:
viewDidLayoutSubviews
這個(gè)方法在controller的的子視圖的position和size被改變的時(shí)候被調(diào)用。
在view 已經(jīng)被設(shè)計(jì)好了它的subviews并且還沒有被展示在屏幕上時(shí)候,可以調(diào)用此方法改變這個(gè)view。
關(guān)鍵點(diǎn)是改變邊界。任何依賴于bounds,并且需要去完成的操作都應(yīng)該放在viewDidLayoutSubviews中,而不是viewDidLoad或viewWillAppear中。
因?yàn)関iew的frame和bounds直到Auto Layout 已經(jīng)完成工作的時(shí)候才會(huì)被確定,所以在執(zhí)行完Auto Layout之后會(huì)調(diào)用此方法。