2012-05-08 15 views
3

顯示我有奇怪的問題模態視圖控制器之後正常工作。的UIScrollView不使用一個UIScrollView控制器與iPhone 4和iOS 5.1結合時在IOS 5.1

我有一個內容尺寸爲640x480(有效雙屏幕)的UIScrollView,除了可以在兩個「屏幕」之間切換的輕掃功能外,我還允許用戶點擊屏幕以響應我的呼叫像...

[scrollView scrollRectToVisible:(CGRectMake 320,0,320,480) animated:YES]; 

第320將爲0,如果發生而滾動視圖的右側的絲錐顯示(注意滾動視圖,使分頁因此只能來休息,要麼完全離開或完全正確)。

我也有一種情況,我有時會顯示模態使用presentModalViewController在包含滾動視圖此視圖控制器的附加視圖控制器。

一切工作完美,直到模態視圖控制器呈現,然後解散如果動畫設置爲YES(如果我改變動畫爲NO,然後按預期工作)scrollRectToVisible方法將不再工作。請注意,水龍頭仍處於註冊狀態,scrollRectToVisible被調用,動畫設置爲YES時它不會執行任何操作)。

這裏是踢球,這個錯誤只發生在iPhone 4的iOS奔跑5.x的
它完美(模態視圖控制器已經顯示,即使後)我: iPhone 3G運行4.x的, iPhone 3GS的運行3.x中, iPod touch(第二代)運行4.x的 ,最令人驚訝的運行5.x的模擬器。

我想知道這是在動畫系統中的bug,因此禁用動畫的模式視圖控制器演示和罷免,這是沒有效果的,問題還是在iPhone 4發生與iOS 5.1。

任何人有任何想法,以什麼可能導致這一點,我怎麼可能解決呢?

回答

0

我有同樣的問題。我意識到在modalViewController被解僱之後,我的UIScrollerView向下移動了20px,這與狀態欄的高度相同。所以,這意味着當我的UIViewController被加載並且UIScrollView被創建時,UIScrollView認爲沒有狀態欄,當它實際存在時。
所以我試圖把viewDidLoad中

[[UIApplication sharedApplication] setStatusBarHidden:NO]; 

現在我UIScrollView總是在狀態欄上停留,與Y位置20像素。它永遠不會下移。

0

我終於設法得到上iPhone4的運行5.1這個工作。爲滾動視圖確保水平彈跳屬性的設置解決了問題,但爲什麼不這樣做會導致問題首先會導致問題超出了我 - 我敢肯定,這是iOS中的一個錯誤。

+0

嗯,它一直工作,直到我更新到iOS 5.1.1,現在這個解決方法不再工作了... –

2

終於追查到了這一點。什麼是豬...

我從視圖控制器中嵌入一個視圖作爲另一個視圖控制器視圖的子視圖。所以我的滾動視圖包含一個也有相關視圖控制器的視圖。

在iOS 5.x之前,方法viewWillAppear,viewWillDisappear,viewDidAppear和viewWillDisappear從不在子視圖視圖控制器上調用,只有主視圖控制器。已經知道這一點,我設置了我的主視圖控制器,以便在發生這些事件時手動調用子視圖視圖控制器方法。

但是,在iOS 5.x中,這個問題似乎是「固定的」,所以在手動將調用viewWillAppear傳遞給我的子視圖控制器時,我不再需要在5.x下執行此操作,因爲方法會自動獲取在5.x下調用 - 因此它現在在5.x下被調用兩次,但在4.x或更早的設備上運行時仍然只有一次。

因此,在5以下。x我的NSTimer用於調用我的updateUI方法正在創建兩次,但因爲在viewDidDisappear我只銷燬計時器,如果它是非零它只會被銷燬一次 - 因此,我泄漏NSTimers在5.x下通過雙重分配, m不在4.x下。

由於多個NSTimers圍繞所有反覆調用updateUI方法的結果是,UI的不斷更新正在殺死動畫系統,因此scrollView的動畫在實際設備上運行時失敗。我猜測它在運行5.x的模擬器上仍然可以正常工作,因爲Mac中的CPU不僅能夠處理額外的工作負載,還能夠正確執行動畫。

我的viewWillAppear方法中的一個簡單檢查,以確保NSTimer尚未創建已解決此問題並保持與4.x和更早版本的兼容性。

每當蘋果公司更新他們的iOS的主要版本時,我都很沮喪地遇到這類問題......這個故事的士氣是不要假定長期存在的類在操作系統的不同修訂版本下仍然表現出相同的行爲。