之前在開發時候遇到過這種狀況, 將一個UIScrollView放到一個UIViewController上去, 結果UIScrollView怎麼也調不出來, 將UITableView放到一個UIViewController上有時候也會出現相似的問題; 或者另外一種狀況, 將一個View放到UIViewController上時候, 有時候view是以UIWindow的 (0, 0) 爲起點的, 有時候是以UINavigation的底部爲起點的, 就是(0, 64).異步
我認爲, 之因此會出現這些奇葩的問題, 興許是xCode的小bug吧, 可是有個最簡單的方法, 能夠用一行代碼解決上面全部的問題:async
[self.view addSubview:[[UIView alloc] init]];
不讓UIScrollView的子類做爲self.view的第一個子控件, 就能夠完美解決上面出現的兩個問題.spa
問題是這樣解決的:線程
dispatch_async(dispatch_get_main_queue(), ^{ [self presentViewController:viewController animated:YES completion:nil]; });
加上上面的一句話, 意思就是將presentViewController這個方法放在主線程的任務中執行. 這樣就會在點擊以後立刻執行.code
直接經過點擊按鈕彈出模態窗口就不會出現這樣的問題, 出現這樣問題的緣由, 我認爲多是模態的的實現原理和UIScrollView
放在一塊兒會產生一些衝突, 因此致使presentViewController
方法並不能直接開始執行, 或者在等待完成全部的配置工做, 而配置工做完成後沒有很好的機制喚起presentViewController的執行, 因此, 將presentViewController方法放在一個異步線程中, 放在當前主線程任務的末尾, 就能夠正常執行.blog
我把一個放着輪播圖片的scrollView放到一個view上面, 結果, 顯示的效果以下圖所示. 我設置的scrollView的frame和它父view大小是如出一轍的, 可是, 當設置scrollView的背景色時候, 發現他們大小仍是如出一轍的, 可是scrollView得可滑動區域, 居然以下圖豎直進度條所示, 進度條已經到最頂了, 圖片仍是能夠在上面一部分顯示, 能夠左右滑動, 也能夠上下小幅度的滑動. 圖片
解決: 一行代碼[self addSubview:[[UIView alloc] init]];
, 將scrollView放到view以前, 先在view上面放一個view, 就是不要讓scrollView做爲view的第一個子控件
, 這樣能夠避免不少沒必要要的麻煩.開發