scrollsToTop无法使用UIViewController包含

Kri*_*oot 9 iphone uiviewcontroller ios

使用SDK 6.1,Xcode 4.6.1,我制作了一个新项目Master-Detail iOS App,ARC,没有故事板.

然后在DetailViewController,在viewDidLoad我添加UITableViews中包含的两个s,UIViewController并确保第二个隐藏如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIViewController *lViewController1 = [[UIViewController alloc] init];
    UITableView *lTableView1 = [[UITableView alloc] initWithFrame: self.view.frame];
    lTableView1.scrollsToTop = YES;
    [lViewController1.view addSubview: lTableView1];
    lTableView1.dataSource = self;
    [self.view addSubview: lViewController1.view];
    [self addChildViewController: lViewController1];

    UIViewController *lViewController2 = [[UIViewController alloc] init];
    UITableView *lTableView2 = [[UITableView alloc] initWithFrame: self.view.frame];
    lTableView2.scrollsToTop = YES;
    [lViewController2.view addSubview: lTableView2];
    lTableView2.dataSource = self;
    [self.view addSubview: lViewController2.view];
    [self addChildViewController: lViewController2];

    // now hide the view in view controller 2
    lViewController2.view.hidden = YES;
}
Run Code Online (Sandbox Code Playgroud)

(我确保这DetailViewController是一个数据源,返回100行UITableViewCells,textLabel.text设置为@"hello")

第二个视图控制器的存在使得scrollsToTop(点击状态栏)不再起作用.如果我不使用UIViewController包含并只添加两个UITableView并将第二个设置为隐藏,scrollsToTop则确实有效.

我究竟做错了什么?

Gob*_*lin 8

scrollsToTop仅适用于单个可见视图.从文档:

此手势适用于单个可见滚动视图; 如果有多个滚动视图(例如,日期选择器)与该属性集,或者如果委托返回NOscrollViewShouldScrollToTop:,UIScrollView忽略该请求.滚动视图滚动到内容视图的顶部后,它会向委托发送一条scrollViewDidScrollToTop:消息.

您可以尝试[tableView setContentOffset:CGPointZero animated:YES]手动调用每个表(或滚动)视图.为此,请scrollViewShouldScrollToTop:UIScrollViewDelegate协议中实现该方法:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    [lTableView1 setContentOffset:CGPointZero animated:YES];
    [lTableView2 setContentOffset:CGPointZero animated:YES];
    return NO;
}
Run Code Online (Sandbox Code Playgroud)


Sul*_*han 3

我目前正在试验你的项目。什么时候

lViewController2.view.hidden = YES;
Run Code Online (Sandbox Code Playgroud)

被替换为

lTableView2.hidden = YES;
Run Code Online (Sandbox Code Playgroud)

然后滚动就可以工作,即使有控制器遏制。

我尝试在控制器视图和表格之间插入一个视图,然后隐藏该视图,但表格没有滚动。

我尝试通过试验隐藏控制器,shouldAutomaticallyForwardAppearanceMethods但表格没有滚动。

结果:根据我的实验,视图层次结构中必须只有一个滚动视图可见,并且hidden不会检查父视图的属性。hidden必须在所有其他滚动视图上设置为NO,而不是在其父视图上。