在某些情况下,我使用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 :无限循环仅发生在从另一个推送的表视图控制器上
答案 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];