防止UITableView contentInset属性影响其backgroundView?

时间:2012-07-22 04:22:01

标签: ios cocoa-touch uitableview

我有一个UITableView,其backgroundView属性设置为UIImageView,显示背景图片。然后,我在图像顶部绘制一些单元格,一切都运行良好。

现在我正在尝试在屏幕顶部显示一个栏。为防止条形图覆盖表格视图的顶行,我将其contentInset属性设置为UIEdgeInsetsMake([topBar frame].size.height, 0, 0, 0)

问题是,更改contentInset似乎也会将背景图像视图向下推,因此桌面顶部会出现奇怪的白色间隙。更奇怪的是,只要我滚动表视图,它就会自行修复。任何人都知道发生了什么事?

如果我更改表格frame而不是contentInset为顶部栏腾出空间,一切正常,但桌面视图的背景图片也向下移动,这使得与应用程序中没有顶栏的其他表视图相比,视图显示不一致。

这就是我在表init方法中设置表背景的方式:

_backgroundImageView = [[UIImageView alloc] initWithFrame:backgroundRect];
[_backgroundImageView setImage:...];
[_backgroundImageView setContentMode:UIViewContentModeBottom];
[self setBackgroundView:_backgroundImageView];

在视图控制器的viewDidLoad

[_tableView setContentInset:UIEdgeInsetsMake([_topBarView frame].size.height, 0, 0, 0)];

修改好吧,将setContentInset移出viewDidLoad进入viewDidAppear:会使其正常工作,除非显示视图内容插入错误,一旦视图出现,它就会卡入到位。将行移至viewWillAppear:使其行为与以前一样。猜猜在我不知道的viewWillAppear:viewDidAppear:之间发生了一些奇怪的事情......

1 个答案:

答案 0 :(得分:1)

您可能只是让表格视图透明并在其后面放置图像视图。避免其他视图(在您的情况下为顶部栏)的正确方法是设置框架属性。