咱們能夠經過[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"xxx"]];方法設置背景,假設有一張圖片名稱爲cell_background.png,咱們用它做爲cell背景圖片,app
//前面是一張圖片,不信你拖動鼠標看看this
直接使用[cell setBackgroundView:[[UIImageView alloc] initWithImage:@"cell_background"]], 那麼顯示的時候是比較奇怪的樣子,代碼以下,spa
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath3d
{orm
//...
對象
//關鍵代碼
圖片
cell.backgroundColor = [UIColor clearColor];it
UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];io
[cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];table
//....
}
效果以下圖,
圖片由於拉伸,邊緣都模糊了,這不是咱們想要的結果和效果。
咱們使用UIImage對象的方法,來保持邊緣地方不變,而只是拉伸中間的區域,這樣圖片就不會模糊了,修改的代碼以下,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//..
cell.backgroundColor = [UIColor clearColor];
UIImage *cellBackImage = [UIImage imageNamed:@"cell_background"];
//這裏是關鍵代碼
cellBackImage = [cellBackImage resizableImageWithCapInsets:UIEdgeInsetsMake(15, 320, 14, 0)];//(top,left,bottom,right)
[cell setBackgroundView:[[UIImageView alloc] initWithImage:cellBackImage]];
//...
}
咱們看一下resizableImageWithCapInsets方法以及它的參數UIEdgeInset
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets NS_AVAILABLE_IOS(5_0); // create a resizable version of this image. the interior is tiled when drawn.
UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
UIEdgeInsets insets = {top, left, bottom, right};
return insets;
}
這個就是設置要保留的邊緣,這樣更改代碼之後,咱們的效果圖以下,
這樣就顯得正常了,看起來也舒服多了吧?
PS:最近在看一些完整的開源代碼,例如Code4app上面的「內涵糗事」,其實看了別人的代碼,能夠忽然有種想通了得感受。上面的這個例子就是我本身在開源代碼上面看見的一個細節,把抽象出來與你們共享。