一个控制器(UIViewController)中需要管理多个tableView,addChildViewController注意事项...

有时候,一个控制器(UIViewController)中需要管理多个tableView,我们需要将多个控制器加入到主控制器中去。使用UIViewController的addChildViewController方法即可。但是这时可能会在tableView的位置上出现问题:

1、UIViewController的automaticallyAdjustsScrollViewInsets属性是会根据所在界面的status bar,navigationbar,tabbar的高度,自动调整scrollView的insets。一般我们会将该属性设置为NO,手动管理布局。

  在ViewDidLoad中设置self.automaticallyAdjustsScrollViewInsets = NO;

2、这时添加进去的tableView的frame的Y值为0,会隐藏64的位置,我们需要在添加子控制器的tableView的时候,设置tableView的contentInset与scrollIndicatorInsets的距离顶部和底部的距离:

  vc.tableView.contentInset = UIEdgeInsetsMake(64,0,self.tabBarController.tabBar.height,0);

  // 设置滚动条的内边距

  vc.tableView.scrollIndicatorInsets = vc.tableView.contentInset;

  此处的64即导航条的高度,距离底部的高度是self.tabBarController.tabBar.height(49)

3、另外,我们需要创建一个scrollView来包含所有的tableView,控制各个tableView的显示。

  

#pragma mark - 懒加载

- (UIScrollView *)scrollView

{

    if (!_scrollView) {

        _scrollView = [[UIScrollView alloc]init];

        _scrollView.frame = self.view.bounds;

        _scrollView.delegate = self;

        _scrollView.pagingEnabled = YES;

        _scrollView.contentSize = CGSizeMake(_scrollView.width * self.childViewControllers.count, 0);

  // 添加默认的控制器

        [self scrollViewDidEndScrollingAnimation:_scrollView];

    }

    return _scrollView;

}

 

#pragma mark - UIScrollViewDelegate

// scrollView停止滑动时调用:非手动拖动时调用

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

{

    NSInteger index = scrollView.contentOffset.x / scrollView.width;

    UITableViewController *controller = self.childViewControllers[index];

    controller.view.frame = CGRectMake(scrollView.contentOffset.x, 0, screenW, scrollView.height);

    controller.tableView.contentInset = UIEdgeInsetsMake(64, 0, self.tabBarController.tabBar.height, 0);

    controller.tableView.scrollIndicatorInsets = controller.tableView.contentInset;

     [scrollView addSubview:controller.view];

}

// scrollView停止滑动时调用:手动滑动时调用

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    [self scrollViewDidEndScrollingAnimation:scrollView];

}

转载于:https://www.cnblogs.com/lrjdaml/p/6018192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值