2012-10-31 20 views
2

卡住了東西,我不確定是否有可能。有沒有辦法將UITableView的背景設置爲自定義圖像,但不要讓該背景適用於tableHeaderView。我的桌子上有一個需要保持透明的標題,因爲我有一個視差類型效果(如路徑2應用程序),在透明表格標題&後面實現了一個圖像,這是桌面視圖的前三分之一......但我需要在表格的其餘部分後面獲取自定義圖像。自定義背景圖像到UITableView,但有tableHeaderView忽略它,並保持透明?

我能順利拿到接近背景風格即時尋找,填補在每個單元后面,有:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

然而,這並不完全符合進出口尋找,因爲我想一個徑向漸變背景查看屏幕上整個桌面視圖的背景,減去透明標題......不僅僅是每個單元格的相同圖像。此外,這種方法真的符合我的tableview的滾動性能加載每個單元格的新BG圖像。

我知道你可以使用:

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]]; 
    [tempImageView setFrame:self.tableView.frame]; 

    self.tableView.backgroundView = tempImageView; 

設置背景圖片的tableview中,這是非常接近我想要做的,但我neeeeeed這個頭透明。有沒有什麼方法可以使用這個,但也告訴tableHeaderView忽略它,並且是透明的? 謝謝大家,&萬聖節快樂!

+0

忘記它,默認的UITableViewController是有史以來最糟糕的事情,它不會做你想做的事情。創建一個普通的UIViewController,把你的東西放在你想要的地方,並且自己實現協議,這是唯一的方法。 – whiteagle

回答

0

是的,可以。我爲分組的UITableView實施了視差效果解決方案。你可以使用相同的方法,除了黑色背景(下面的例子),你可以使用你的圖像。本質上,你有兩個視圖背後的tableview(這是清晰的,標題視圖背景清晰以及表視圖背景本身)。這兩個視圖基於滾動而移動(UIScrollViewDelegate)。你的桌面視圖背景圖像,你會「滾動」1表1,而你的視差圖像將「滾動」在不同的速度當然。在下面的例子中,我認爲我的「_secondParaView」將成爲您桌子的背景圖片。

首先,在viewDidLoad中,創建視圖以部分隱藏視差效果的圖像,應該與您希望tableview的背景顏色相同,在我的案例中爲blackColor。我將視圖放置在基於圖像大小的固定偏移量處,您希望此視圖的頂部與'節0'標題視圖末尾的頂部對齊。它會隨着tableview的滾動而「滾動」。在tableview下面插入這個視圖。

_secondParaView = [[UIView alloc] initWithFrame: CGRectMake(0.0, kTableViewOffset, self.view.frame.size.width, 200.0)]; 
_secondParaView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 0.0 alpha: 1.0]; 
[self.view insertSubview: _secondParaView belowSubview: _tableView]; 

_headerImageYOffset = -40.0; 
_headerImageView = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SpaceRedPlanet640x480.png"]]; 
CGRect headerImageFrame = _headerImageView.frame; 
headerImageFrame.origin.y = _headerImageYOffset; 
_headerImageView.frame = headerImageFrame; 
[self.view insertSubview: _headerImageView belowSubview: _secondParaView]; 
_tableView.backgroundColor = [UIColor clearColor]; 

然後實現頁眉視圖/頭視圖大小兩個分組實現代碼如下方法:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    if (section == 0) { 
     UIView * tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, self.view.frame.size.width, kTableViewOffset)]; 
     tableHeaderView.backgroundColor = [UIColor clearColor];  
     return tableHeaderView; 
    } else 
     return nil; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    if (section == 0) { 
     return kTableViewOffset; 
    } else 
     return 2; 
} 

就像在「正常」的tableview視差實現,讓你的VC一個UIScrollViewDelegate和實現這個scrollViewDidScroll像這樣:

#pragma mark - 
#pragma mark UIScrollViewDelegate methods 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGFloat scrollOffset = scrollView.contentOffset.y; 
    CGRect headerImageFrame = _headerImageView.frame; 
    CGRect underParaFrame = _secondParaView.frame; 

    if (scrollOffset < 0) { 
     // Adjust top image proportionally 
     headerImageFrame.origin.y = _headerImageYOffset - ((scrollOffset/3)); 
    } else { 
     // We're scrolling up, return to normal behavior 
     headerImageFrame.origin.y = _headerImageYOffset - scrollOffset; 
    } 
    underParaFrame.origin.y = kTableViewOffset - scrollOffset; 
    _headerImageView.frame = headerImageFrame; 
    _secondParaView.frame = underParaFrame; 
} 

希望這有助於,或者至少是可以幫助別人實現了分組的tableview的視差效果。我找不到解決辦法。

+0

嘿,謝謝你的迴應,我直到現在纔看到它。我會盡快檢查出來。再次感謝細節。 –

0

是否有一個原因,您不能讓tableHeaderView成爲您希望具有視差效果的圖像的容器?

創建UIView並堅持它爲UITableViewtableHeaderView,然後添加你的UIImageView(或其他)到tableHeaderView。使用UIScrollView的委託方法,您可以重新定位此UIView,但是您可以在其父視圖中對用戶滾動作出反應。

看到這個開源項目的啓發視差UITableView一個路徑:RBParallaxTableViewController

+0

上週我看到了RBParalax的例子,說實話,我真的無法弄清楚它發生了什麼。我甚至沒有看到在代碼中的任何地方使用tableHeaderView(如果這是愚蠢的,不要笑)...大聲笑,我還在學習)。我不知道如果我可以通過在頭本身內嵌入一個UIView來實現效果,但是如果你認爲它是可行的,我真的很欣賞一些示例代碼或現有的文章/博客來指向我正確的方向,甚至是RBParallax項目中發生的事情的快速分解。 Thx –