scrollsToTop不适用于简单的Master-Detail iOS应用程序

时间:2013-04-12 14:09:08

标签: iphone ios cocoa

使用Xcode 4.6.1,iOS SDK 6.1,创建一个新的Master-Detail iOS应用程序(使用ARC,没有故事板),在DetailViewController中,我将configureView设置为:

- (void)configureView
{
    UITableView *lTableView = [[UITableView alloc] initWithFrame: self.view.frame];
    lTableView.scrollsToTop = YES;  // just to emphasise, it is the default anyway
    lTableView.dataSource = self;
    [self.view addSubview: lTableView];
}

然后我通过返回100个虚拟UITableViewCells确保UITableView中有足够的数据,似乎状态栏上的点击不会将表格视图滚动到顶部。

我在这里遗漏的显而易见的事情是什么?

1 个答案:

答案 0 :(得分:1)

如果同一窗口中的任何其他UIScrollView实例或子类实例也将scrollsToTop设置为YES,则滚动到视图顶部将无效,因为iOS不知道如何选择滚动哪一个。在您的情况下,configureView实际上被调用了两次:

  • 加载详细控制器时viewDidLoad
  • 当主控制器推送到详细控制器时setDetailItem:

由于您在UITableView中添加了configureView作为子视图,因此您最终会得到两个表格视图,其中scrollsToTop设置为YES。要解决此问题,请在viewDidLoad中创建表格视图,并仅使用configureView修改给定详细信息项所需的基本状态。

- (void)viewDidLoad {
    [super viewDidLoad];

    UITableView *lTableView = [[UITableView alloc] initWithFrame: self.view.frame];
    lTableView.scrollsToTop = YES;
    lTableView.dataSource = self;
    [self.view addSubview: lTableView];

    [self configureView];
}