2013-03-29 52 views
1

A UIScrollView包含5 UIView s。基本上我想展開並摺疊它們,當用戶觸摸UIView中的任何一個時。UIView框架在滾動時自動重置

代碼動畫globalPressReleasesView擴大:

  [UIView beginAnimations:@"Expand" context:nil]; 
      [UIView setAnimationDuration:1.0]; 
      [UIView setAnimationDelegate:self]; 

           [globalPressReleasesView setFrame:CGRectMake(globalPressReleasesView.frame.origin.x, globalPressReleasesView.frame.origin.y, globalPressReleasesView.frame.size.width, globalPressReleasesView.frame.size.height + [globalPressReleasesArray count]*105)]; 

           [financialPressReleasesView setFrame:CGRectMake(financialPressReleasesView.frame.origin.x, financialPressReleasesView.frame.origin.y + [globalPressReleasesArray count]*105, financialPressReleasesView.frame.size.width, financialPressReleasesView.frame.size.height)]; 


           [newOnCscView setFrame:CGRectMake(newOnCscView.frame.origin.x, newOnCscView.frame.origin.y + [globalPressReleasesArray count]*105, newOnCscView.frame.size.width, newOnCscView.frame.size.height)]; 

           [latestEventsView setFrame:CGRectMake(latestEventsView.frame.origin.x, latestEventsView.frame.origin.y + [globalPressReleasesArray count]*105, latestEventsView.frame.size.width, latestEventsView.frame.size.height)]; 

           [latestCaseStudiesView setFrame:CGRectMake(latestCaseStudiesView.frame.origin.x, latestCaseStudiesView.frame.origin.y + [globalPressReleasesArray count]*105, latestCaseStudiesView.frame.size.width, latestCaseStudiesView.frame.size.height)]; 

           [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height + [globalPressReleasesArray count]*105)]; 

      [UIView commitAnimations]; 

廈門國際銀行的其他特性:

每個UIView裁剪 scrollview.autoresize = YES

問題:

'globalPressReleasesView'完美展開,但當我滾動我的scrollviewglobalPressReleasesView幀自身重置爲在xib中定義的原始幀值。

有人可以猜測是什麼問題嗎?

+0

一旦檢查scrollview委託方法 – Balu

+0

是試過了,這是我如何知道,所有包含的'UIView'幀的值正在重置。 ' - (void)scrollViewDidScroll:(UIScrollView *)scrollView' – turtle

+0

檢查globalPressReleasesView框架在這個方法中? – Balu

回答

3

首先,讓我們來簡化代碼一點:

CGFloat heightDifference = [globalPressReleasesArray count] * 105.0f; 

CGRect globalPressReleasesViewFrame = globalPressReleasesView.frame; 
globalPressReleasesViewFrame.size.height += heightDifference; 
globalPressReleasesView.frame = globalPressReleasesViewFrame; 

NSArray* movedViews = @[financialPressReleasesView, newOnCscView, latestEventsView, latestCaseStudiesView]; 

for (UIView* movedView in movedViews) { 
    CGRect movedViewFrame = movedView.frame; 
    movedViewFrame.origin.y += heightDifference; 
    movedView.frame = movedViewFrame 
} 

CGSize contentSize = scrollView.frame.size; 
contentSize.height += heightDifference; 
[scrollView setContentSize:contentSize]; 

現在是非常明確的代碼做什麼。

該代碼似乎是絕對正確的。我建議你檢查一下你設置幀的值是什麼(NSLog或斷點)。

請注意,只有兩種方法可以更改視圖框架。 1.您在代碼 中更改它2.由於您已更改其始祖的框架(或當用戶切換縱向/橫向模式時),所以它已自動調整大小。

+0

我已經把scrollview委託的斷點,以確定何時UIView被更改。當我開始滾動UIScrollView時,UIView框架的第一個值是好的,然後它自己變成以前的值。我可以把斷點放在別的地方來完成這個任務嗎? – turtle

+0

我改變了我編碼的方式。我已經將這些'UIView'作爲'UITableView'的一部分,並且tableview屬性本身控制着一切.. :) – turtle

-4

嘗試以編程方式創建視圖,不要在.xib文件中定義它們。

以編程方式定義UI元素是一種專業且良好的編程習慣。專業iOS開發人員從不使用.xib或故事板。

+0

實際上,在任何(專業或業餘)開發中,建議使用.xib文件。首先,速度更快。其次,你不是用視圖幀的「魔術」數字來污染你的代碼。這不是Obj-C和XCode的領域。幾乎所有的編程語言都有一個視覺設計師是有原因的。 – Sulthan

+0

我想你是iOS開發的新手。我建議你閱讀關於iOS開發的更多文章,並與開發成功應用程序的程序員說一句話。關於這個特定的話題有很多爭論。是的,撰寫評論時絕對不要冒犯。這個網站是用於學習和清除疑慮,而不是交換苛刻的評論。 –

+0

[鏈接](http://blog.shinetech.com/2011/07/23/when-should-new-ios-developers-start-using-interface-builder/) –