UIScrollView重叠弹出UIViewController

时间:2012-08-07 13:27:25

标签: ios uitableview uiscrollview

我有一个包含多个页面的UIScrollView,每个页面都包含一个UITableViewController(类似于Reminders-App)。 点击其中每个UITableViewControllers中的单元格会导致DetailViewController被推送。

然而,当DetailViewController弹出时,它会立即消失在UIScrollView后面,而不是顺利滑落。我可以看到UIScrollView的下一页滑落,但是当从最后一页推送DetailViewController时,转换看起来很好,因为UIScrollView上没有可能重叠的内容被解雇的DetailViewController

修改

这就是我创建视图控制器层次结构的方法(简化):

ScheduleViewController.m:

- (void) viewDidLoad {
    // ... 
    for (int i = 0; i < 3; ++i) {
        MyTableViewController *myTableViewController = [[MyTableViewController alloc] initWithNibName:@"MyTableView" bundle:nil];

        [self.scrollView addSubview:myTableViewController];
        [self addChildViewController:myTableViewController];
        [myTableViewController didMoveToParentViewController:self];
    }

这是 tableView:didSelectCellAtIndexPath:中的MyTableViewController

(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // ... 
        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

        DetailViewController* detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
        [self.navigationController pushViewController:detailViewController animated:YES];

    }
}

我在这里做错了什么?这种行为是否有任何变通方法?

1 个答案:

答案 0 :(得分:6)

UIScrollView的超级视图需要将clipsToBounds设置为TRUE(如果您以这种方式创建视图,则在界面构建器中将该选项称为Clip Subviews。)正如您所注意到的那样,似乎UIScrollView可能正在运行其超级视图,因为它太大了,这导致你的动画看起来很糟糕。剪掉它会阻止它发生。