iOS中 addChildViewControllers 调整tableView位置

兜里没糖_lyl

于 2016-10-30 15:22:27 发布

2383
收藏
分类专栏: iOS
版权

iOS
专栏收录该内容
11 篇文章0 订阅
订阅专栏
有时候,一个控制器(UIViewController)中需要管理多个tableView,我们需要将多个控制器加入到主控制器中去。使用UIViewController的
addChildViewController方法即可。但是这时可能会在tableView的位置上出现问题:
UIViewController的automaticallyAdjustsScrollViewInsets属性是会根据所在界面的status bar,navigationbar,tabbar的高度,自动调整scrollView的insets。一般我们会将该属性设置为NO,手动管理布局。

在ViewDidLoad中设置self.automaticallyAdjustsScrollViewInsets = NO;

这时添加进去的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)

另外,我们需要创建一个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];

}

————————————————
版权声明:本文为CSDN博主「兜里没糖_lyl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lyl123_456/article/details/52972226

你可能感兴趣的:(iOS中 addChildViewControllers 调整tableView位置)