我想使用UIScrollView
作爲我的應用程序的主要容器,使我能夠在子視圖之間來回滑動。要做到這一點,我創建了一個UIViewController
子類有UIScrollView
IBOutlet中:UIScrollView +改變方向=搞砸子視圖(iPad)
在viewDidLoad
方法我構建子頁面:
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* aWebView= [[UIWebView alloc] initWithFrame:frame];
[self.scrollView addSubview:aWebView];
}
當啓動應用程序(肖像模式),一切正常。也就是說,UIWebViews
與正確的尺寸並排放置,我可以在它們之間來回滑動。
當我旋轉到風景時,似乎scrollview尺寸和子視圖都沒有調整大小。
我不知道我應該怎麼做才能調整子視圖和scrollview本身的大小,或者我應該在代碼的哪一點做任何事情,而且我似乎找不到任何示例。
任何人都知道該怎麼辦?
[編輯]嘗試通過mahboudz的建議,調整大小:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * pageCount, self.scrollView.frame.size.height);
for (int i= 0; i< pageCount; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIWebView* view= [[self.scrollView subviews] objectAtIndex:i];
view.frame= frame;
}
}
這種我想要做什麼,但有以下問題:
1),可以看到子視圖增長到正確改變屏幕尺寸時的屏幕尺寸
2)噹噹前頁面是例如第5頁的第2頁時,頁面在方向改變後並不完全可見,但是像40像素一樣離開屏幕
3)我得到這取決於應用程序是否在肖像或風景模式(模擬)推出奇怪的效果,虐待試圖解釋:
當應用程序在縱向模式下啓動:
- 形狀/子視圖的邊框看起來很亂/屏幕外,見截圖:
http://i53.tinypic.com/21jr76x.png
- 當我旋轉到風景,一切看起來不錯,滾動工作精湛。甚至當我轉回肖像,現在一切是偉大的:
http://i55.tinypic.com/if3iiw.png
當應用程序在橫向模式launchend:
我得到同樣搞砸/屏幕外毛刺在人像模式下
縱向和橫向之間來回切換修復此景觀模式
BUT:縱向模式將具有子視圖與風景模式的寬度,從而子視圖太寬
我試圖修復1)做上面的代碼中willRotateToInterfaceOrientation
但是它完全弄亂了佈局。
// update the scroll view to the appropriate page
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * self.currentPage;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:NO];
注:
我加入以下代碼didRotateFromInterfaceOrientation
固定2)當前頁面處於scrollViewDidScroll
確定我沒有任何想法如何解決3)
所以基本上我需要先設置contentSize(子幾何的新幾何*數量),然後循環子視圖並將框架屬性設置爲新幾何?我是否還必須觸發重新繪製視圖(setNeedsDisplay)或類似視圖,還是隻需設置frame和contentSize即可工作? – user944943
我不認爲你需要setNeedsDisplay。我相當肯定你需要調整你的框架/界限和contentSize等。看看你是否可以通過使用InterfaceBuilder(或通過代碼)設置自動調整大小的標誌來獲得一些自動移動/調整大小的幫助。 – mahboudz
添加了更多代碼並嘗試解決上述問題 – user944943