2014-02-06 39 views
0

如果標題沒有告訴你任何東西,這裏是我最近發現並且很好奇的: 在我的應用程序中,我有一個帶有按鈕的UIScrollView。這些按鈕都有一個子視圖 - UILabel的一個實例。有時會觸發某個特定的事件來改變標籤中的文本,並且我還需要更改標籤和按鈕的框架,以便可以顯示整個文本(不會被截斷)。所以我只是抓住了按鈕的第一個子視圖,並檢查了它的文本需要多少空間。爲什麼UIScrollView在滾動時將UIImageView子視圖添加到它的子視圖

如果在滾動期間發生該事件,則會導致崩潰。原來,除了標籤,每個按鈕都有另一個子視圖,它是UIImageView的實例。起初,我認爲在滾動期間,UIScrollView需要對其子視圖進行「截圖」,並將圖像置於頂部,以便在性能方面使動畫滾動更便宜。然而,這個邏輯有缺陷,因爲UIImageView是索引爲0的子視圖,所以它被放在我的標籤下面。

任何人都知道爲什麼會發生這種情況?蘋果工程師用這個奇怪的機制試圖達到什麼目的?

請注意,它實際上可能只發生在按鈕上。另外,我檢查了標籤,但他們沒有任何子視圖。

回答

1

UIButtons有一個UIImageView爲背景圖像(這是nil,直到您撥打- (void)setImage:(UIImage *)image forState:(UIControlState)state或使用Interface Builder設置它)。所以我會假設索引0處的子視圖是背景圖像,因爲這將首先被繪製爲低於一切。

,你可以做些什麼,以確保你得到你正在尋找的UILabel是這樣的:

- (UILabel *)getLabelForButton:(UIButton *)button 
{ 
    for (id subView in button.subviews) 
    { 
     if ([subView isKindOfClass:[UILabel class]]) 
     { 
      return subView; 
     } 
    } 
    return nil; 
} 
+0

我的按鈕沒有任何背景圖片是透明的。此外,這隻發生在滾動進行中,否則唯一的子視圖就是標籤。可能有些事情要做。 – johnyu

+0

剛剛編輯我的答案,給你一個建議,確保你只拉出標籤,所以你最終沒有一個實際上沒有框架的對象。 – sfeuerstein

+0

我已經修好了。我只是在這裏問爲什麼圖像視圖出現的想法。純粹出於好奇。 – johnyu

相關問題