UITableView的"反弹区域"中的浅灰色背景

T .*_*T . 52 iphone uitableview uikit uisearchbar

Apple的iPhone应用程序(如Music和Contants)在UITableView中使用搜索栏.向下滚动以使搜索栏向下移动时,滚动视图内容上方的空白区域呈浅灰色背景颜色(请参见屏幕截图).

Contacts app的屏幕截图,显示浅灰色背景

(请注意,搜索栏顶部有一条稍暗的边线.这不适用于默认的UISearchBar,但是子类应该处理它.)

我尝试设置UITableView的背景颜色,但这也会影响行.有谁知道如何实现这种效果?我是否必须覆盖实现drawRect:或者是否有内置方式?

Pey*_*loW 38

设置透明度对性能不利.你想要的是搜索栏上方的灰色区域,但它应该仍然是列表末尾的白色.

您可以UITableView在内容之上添加子视图.

CGRect frame = self.list.bounds;
frame.origin.y = -frame.size.height;
UIView* grayView = [[UIView alloc] initWithFrame:frame];
grayView.backgroundColor = [UIColor grayColor];
[self.listView addSubview:grayView];
[grayView release];
Run Code Online (Sandbox Code Playgroud)

如果你愿意,可以在视图中添加更多花哨的东西,可能是淡入淡出,或者没有子类化的分隔线UISearchBar.


Nic*_*ina 30

这是我最喜欢的技巧之一.

UIView *topview = [[[UIView alloc] initWithFrame:CGRectMake(0,-480,320,480)] autorelease];
topview.backgroundColor = [UIColor colorWithRed:226.0/255.0 green:231.0/255.0 blue:238.0/255.0 alpha:1];

[self.tableView addSubview:topview];
Run Code Online (Sandbox Code Playgroud)

基本上,您正在创建一个大屏幕大视图并将其置于内容区域"上方".你永远无法向上滚动它.

并且不用担心UIView的内存影响是320x480像素,它不会消耗任何重要的内存,因为CALayer没有任何有意义的内容.

注意:当"接受"答案简单得多时,为什么这个答案是相关的?为什么不在backgroundView表格视图上设置?这是因为,在原始问题中显示的联系人应用程序的情况下,表视图"上方"区域具有与表格视图(白色)"下方"区域不同的背景颜色(浅蓝色).此技术允许您在表视图的上方和下方使用两种不同的颜色,这是通过简单的背景无法实现的.

编辑1/2018:正如汤姆在评论中指出的那样,这个答案已经相当陈旧,并且假设所有iOS设备都具有相同的屏幕尺寸(看起来很疯狂,但在2009年我回答这个问题的情况就是如此).我在这里提出的概念仍然有效,但你应该用来UIScreen.main.bounds计算实际的屏幕尺寸,或者你可以进入一些花哨的汽车布局的东西(建议欢迎).我不建议tableView.bounds在另一个答案中使用,因为通常viewDidLoad视图的大小不一定是控制器调整大小后的大小.有时他们从0x0开始!


Hus*_*inB 21

从iOS 7开始,您可以通过更改tableview背景视图来修补此问题.

[self.tableView setBackgroundView:view];
Run Code Online (Sandbox Code Playgroud)

使视图的背景颜色与父视图颜色相同.


bud*_*ino 21

延伸HusseinB的建议:

斯威夫特3

let bgView = UIView()
bgView.backgroundColor = UIColor.white
self.tableView.backgroundView = bgView
Run Code Online (Sandbox Code Playgroud)

目标C.

UIView *bgView = [UIView new];
bgView.backgroundColor = [UIColor whiteColor];
[self.tableView setBackgroundView:bgView];
Run Code Online (Sandbox Code Playgroud)


Dan*_*nny 8

此代码适用于Swift fot UITableView:

var frame = self.tableView.bounds
frame.origin.y = -frame.size.height
frame.size.height = frame.size.height
frame.size.width = UIScreen.mainScreen().bounds.size.width
let blueView = UIView(frame: frame)
blueView.backgroundColor = UIColor.headerBlueColor()
self.tableView.addSubview(blueView)
Run Code Online (Sandbox Code Playgroud)


小智 7

Swift中(在iOS9上测试)

    let backView = UIView(frame: self.tableView.bounds)
    backView.backgroundColor = UIColor.clearColor() // or whatever color
    self.tableView.backgroundView = backView
Run Code Online (Sandbox Code Playgroud)


Alc*_*nio 5

最简单的解决方案

在表格视图的弹跳区域的底部和顶部创建不同颜色的最简单方法是设置表格视图的关键tableHeaderBackgroundColor。这样做可以设置顶部颜色。我不确定,但也许页脚还有另一个键,看看。如果你没有找到任何东西,你只需要用你想要在底部显示的颜色来设置表格视图的背景。你可以在上面看到一个示例代码:

self.table.setValue(UIColor.blue , forKey: "tableHeaderBackgroundColor")
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。如果是,请让其他人知道这种简单的放弃方法:)