2014-04-01 85 views
0

我想在UITableViewCell的背面設置拉伸背景圖片。 這是一個常見的問題,回答了很多次,所以我在做它的「標準方式」:UITableViewCell backgroundView不拉伸

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell; 
    UIImage* bgImg; 

    bgImg = [[UIImage imageNamed:@"menu_bg_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 1, 0)]; //top/left/bottom/right 
    cell = [tableView dequeueReusableCellWithIdentifier:@"mycell" forIndexPath:indexPath]; 
    [cell setBackgroundView:[[UIImageView alloc] initWithImage:bgImg]]; 
    return cell; 
} 

如果我只是試試這個,我得到一個平鋪的背景。 閱讀幾個類似的問題/答案後,我曾嘗試:

  • 強制後臺查看的規模:背景視圖cell.backgroundView.contentMode = UIViewContentModeScaleToFill;

  • 力大小調整:cell.backgroundView.clipsToBounds = YES;

  • 面具的設置自動調整大小:cell.backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

  • 試圖爲力的背景的幀大小UIImageView

似乎我的背景圖像被部分地拉伸到預定尺寸,然後平鋪(沒有足夠的聲譽尚未上傳圖片,遺憾。 ..):

  • 垂直拉伸是局部的和不使用全高
  • 橫向拉伸是局部的和不使用全寬度

背景圖片是一張6x3像素的圖片(左側藍色垂直線,深灰色背面和底部淺灰色水平線)。

我在做什麼錯?

感謝您的幫助!

[編輯] 實際上這個問題似乎並不是一個UIEdgeInsetsMake問題。 當使用bgImg = [UIImage imageNamed:@「menu_bg_selected.png」];背景圖片仍然沒有填充完整的單元格背景。

+0

cell.backgroundView.contentMode = UIViewContentModeTop; –

+0

好吧我知道了,我需要使用resizingMode參數:'bgImg = [[UIImage imageNamed:@「menu_bg_selected.png」] resizableImageWithCapInsets:UIEdgeInsetsMake(0,5,1,0)resizingMode:UIImageResizingModeStretch];' – Noth

+0

I'儘快回答我自己的問題(儘量不要做)。感謝大家的建議! – Noth

回答

0

我相信這個問題是來自

UIEdgeInsetsMake(0, 5, 1, 0) 

基本上你說我希望有一個伸展的圖像,但我不想底線伸展既不左邊框。這沒有任何意義。你的邊緣插圖必須留下一些可拉伸的部分。舉例來說,如果你的形象是6X3你可以有:

UIEdgeInsetsMake(1, 2, 1, 2) 

但是你可能想之前重新設計你的形象。

+0

事實上,我認爲這意味着「不要在左側拉伸5個像素,在底部拉伸像素」底部和左側的「不可拉伸」區域將在平鋪其餘的背景時被平鋪。我錯了嗎?無論如何,我嘗試了你的建議:局部垂直拉伸失去了,圖像完全平鋪,沒有任何拉伸。 – Noth

+0

我相信你錯了,使用這個功能,圖片應該伸展,而不是平鋪。如果你想伸展,我相信你必須留下一個可拉伸的部分(意思是沒有任何上限)你用我剛剛編輯的代碼嘗試過嗎? – streem

+0

是的,只是試過!它不能解決問題,背景圖像拉伸方式不同,但仍然可以填充完整的單元背景... – Noth

0

此代碼適用於UIImage

UIIMage *bgImage = [[UIImage imageNamed:@"menu_bg_selected.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:15]; 
+0

它似乎並沒有解決它。我的背景圖片是6x3像素,所以左上邊距15似乎很明顯。 – Noth

+0

確定您更改了保證金並檢查了 – Dipin

+0

這不是Cap值的問題。順便說一下,自iOS 5.0以來,不再推薦使用stretchableImageWithLeftCapWidth – Noth

0

好吧,我明白了!

問題是我的背景圖片只是部分拉伸,然後平鋪,以填充完整的單元格(無論UIEdgeInsetsMake參數是什麼)。

我成功地使用了:resizableImageWithCapInsets和指定resizingMode參數

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell; 

    UIImage* bgImg; 
    bgImg = [[UIImage imageNamed:@"menu_bg_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 1, 0) resizingMode:UIImageResizingModeStretch]; 
    cell = [tableView dequeueReusableCellWithIdentifier:@"mycell" forIndexPath:indexPath]; 
    [cell setBackgroundView:[[UIImageView alloc] initWithImage:bgImg]]; 
    return cell; 
} 

感謝大家的建議!