美文网首页
iOS中 addChildViewControllers 调整t

iOS中 addChildViewControllers 调整t

作者: 缘來諟夢 | 来源:发表于2022-07-14 18:09 被阅读0次

    兜里没糖_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 调整t

          本文链接:https://www.haomeiwen.com/subject/wpdfirtx.html