3

我将UITableViewbackgroundView属性设置为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:我不知道......

4

1 回答 1

1

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

于 2012-07-22T05:02:51.087 回答