UITableView的setBackgroundView外观导致无限循环

时间:2013-06-05 19:13:29

标签: ios objective-c uitableview ios5 uiappearance

在某些情况下,我使用setBackgroundView进行UITableView外观时遇到了奇怪的无限循环。这是外观初始化:

UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"bg"]];
[[UITableView appearance] setBackgroundView:iv];

我有一个控制器:

@interface MyController : UITableViewController

只有init方法和viewWill*/viewDid*代理,只有简单的日志记录。没有其他的。在这种情况下,我得到关于布局子视图的无穷无尽的消息:

2013-06-05 21:23:45.054 MyApp[16700:c07] init
2013-06-05 21:23:45.056 MyApp[16700:c07] viewDidLoad
2013-06-05 21:23:45.057 MyApp[16700:c07] viewWillAppear
2013-06-05 21:23:46.059 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:47.061 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:48.064 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:49.066 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:50.067 MyApp[16700:c07] viewWillLayoutSubviews
2013-06-05 21:23:51.069 MyApp[16700:c07] viewDidLayoutSubviews
2013-06-05 21:23:52.070 MyApp[16700:c07] viewWillLayoutSubviews

如果我转到:

@interface MyController : UIViewController
一切进展顺利。

这是预期的行为(并且我没有清楚地理解UIAppearance)或者这是功能被破坏了吗?

UPD :在AppDelegate中初始化外观。

UPD2 :无限循环仅发生在从另一个推送的表视图控制器上

2 个答案:

答案 0 :(得分:0)

根据to this answer UITableView不支持使用setBackgroundView进行外观自定义。所以这不是一个错误 - 它根本就没有支持。

答案 1 :(得分:0)

根据Apple文档,UITableView具有背景属性。

self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"BackgroundImage.png"]];

将图像设置为UITableView的背景是可能的,尽管有些微不足道。有四个步骤:

1)将tableView的backgroundColor属性设置为clearColor,以便可见背景图像。

[myTableView setBackgroundColor:[UIColor clearColor]];

2)创建UIImageView的实例,并将其image属性设置为要在表格后面显示的图像。

UIImageView *tableBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage"]];

3)设置UIImageView的frame属性,使其与tableView的大小相同:

[tableBackgroundView setFrame: myTableView.frame];

4)更新tableView的backgroundImage属性以指向新的UIImageView对象:

[myTableView setBackgroundView:tableBackgroundView];